php - 与 utf8_general_ci 和 utf8_unicode_ci 混淆

标签 php mysql collation

mysql服务器排序规则是my.cnf中的utf8_general_ci

我正在为数据库使用 utf8_general_ci 归类,现在我已经使用 utf8_unicode_ci 归类创建了几个表 同一个数据库。

现在我想将 utf8_unicode_ci 用于服务器/数据库/表/字段。为了首先做到这一点,我需要将服务器的排序规则更改为 utf8_unicode_ci 然后是数据库、表和字段。

我的问题是我已经使用 utf8_general_ci 将数据存储在表中,我是否可以保持原样而不对数据做任何操作,或者我是否需要进行任何类型的转换。

另一件事是,如您所见,服务器级别的排序规则是 utf8_general_ci,但表和字段级别的排序规则是 utf8_unicode_ci,因此当我从这些表中存储和检索数据时,根据我当前的设置,mysql 使用什么排序规则?

谢谢。

最佳答案

“服务器级别”排序规则毫无意义。
服务器和数据库级别的字符集(和排序规则)仅用作表(和数据库)创建的默认值。

  • 比如说,如果您在创建数据库时没有提供任何排序​​规则,它将使用服务器排序规则创建。但是如果你这样做了 - 将使用提供的一个并且服务器整理根本不会干扰。
  • 如果您没有在表定义中提供任何排序​​规则,则将使用数据库排序规则创建表。但如果您这样做 - 将使用提供的一个,服务器和数据库整理都不会影响您的查询。

只有表和字段级别的排序规则才是重要的。

if i already have data in tables stored using utf8_general_ci, can i just keep as it is

是的。您的数据库中可以有包含任何字符集的表。

关于php - 与 utf8_general_ci 和 utf8_unicode_ci 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062985/

相关文章:

mysql - 时间差返回整数ansi sql 92

php - 如何将多个 MySQLi 结果编码为正确的 json 格式?

php - PHP错误创建MySQL表

mysql - MySql 上的 ISNULL 与排序规则 latin_swedish_ci 和 utf8_general_ci 的工作方式是否不同

php - 如何使用 php 降低 sql 值

javascript - 如何在 jquery 中将链接转换为 seo 友好的 url

php - Laravel 框架在 xampp 上安装失败

php - php 中的搜索查询

mysql - 我应该设置什么 COLLATE 来使用所有可能的语言?

mysql - 如果我为 mysqld 添加一些默认字符和整理设置,Rails 无法连接到 mysql 服务器