导入时不遵守默认数据库排序规则

时间:2012-06-06 08:04:04

标签: mysql phpmyadmin collation

在我的数据库中,排序规则最初是 utf8_general_ci 。但是,我注意到 utf8_unicode_ci 是必要的,因为它具有更好的排序准确性。

所以我使用phpmyadmin导出了所有数据库并检查了导出的sql文件中没有出现“COLLATION”这个词(除了在一个表中设置为二进制的只有2次)所以通常这个脚本是与排序无关的导入时不应暗示任何特定的排序规则,但使用数据库默认值。

删除所有表后,数据库排序规则更改为 utf8_unicode_ci ,然后导入脚本从phpmyadmin运行。但结果是,所有表格和所有列都会再次显示 utf8_general_ci 整理(并且排序不正确)。为什么??怎么做才能改变它?

P.S。导出/导入脚本在开头包含注释行:

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

我不知道导入时是否有任何影响,但在打开mysql控制台后,命令show variables like 'collation_connection'将COLLATION_CONNECTION显示为 cp852_general_ci 。 但是,在phpmyadmin->变量中,变量'collat​​ion_connection'设置为 utf8_general_ci 。但是没有办法改变它。

1 个答案:

答案 0 :(得分:2)

这是因为数据库导出是在每个表上设置字符集,并且这样的子句带有默认排序规则,该排序规则取决于字符集,而不是连接的排序规则。 utf8_general_ci是utf8的默认排序规则。

如果价格合理,您必须使用ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;转换表格或编辑数据库导出。

对于MySQL控制台:命令行客户端在Windows上几乎被打破。它永远不会支持,显示或读取Unicode,并且您正在为该客户端获得每个连接排序规则,该排序规则与您所在区域的Windows所谓的OEM字符集相匹配。这是一种Windows错误,难以在便携式软件中解决。 PHPMyAdmin使用Web服务器,不会遇到此问题。我建议你在任何情况下使用类似UNIX的操作系统,如GNU / Linux,不仅仅是因为这个原因。作为一个额外的好处,MySQL,Apache和您的整个应用程序堆栈在Linux上表现更好。