将MySQL表从latin1转换为utf8
-
28-09-2019 - |
题
我正在尝试将一些MySQL表从latin1转换为utf8。我正在使用以下命令,该命令似乎可以正常工作。 通用标签
但是,在一张桌子上,我收到有关重复键输入的错误。这是由“名称”字段上的唯一索引引起的。似乎在转换为utf8时,会将任何“特殊”字符都索引为它们的等效英文正本。例如,已经有一个名称字段值为“ Dru”的记录。转换为utf8时,带有“Drü”的记录被视为重复。“ Patrick”和“Påtrìçk”也是如此。
以下是重现此问题的方法: 通用标签
解决方案
字符串'Drü'
和'Dru'
评估为相同的原因是,在utf8_general_ci
归类中,它们被视为“相同”。排序规则用于字符集的目的是提供一组关于何时字符串相同,何时在另一字符串之前排序等等的规则。
如果您需要不同的比较规则集,则需要选择其他排序规则。您可以通过发出utf8
来查看SHOW COLLATION LIKE 'utf8%'
字符集的可用归类。有很多归类用于文本,大多数都是使用特定语言。还有utf8_bin
归类,它将所有字符串都比较为二进制字符串(即,将它们比较为0和1的序列)。
其他提示
UTF8_GENERAL_CI
不区分重音。
使用UTF8_BIN
或特定于语言的排序规则。
不隶属于 StackOverflow