我正在尝试将一些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或特定于语言的排序规则。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top