MySQL,将Latin1迁移到UTF8后,LIKE搜索不再有效。尝试了所有UTF8排序规则

时间:2012-02-28 21:07:49

标签: mysql utf-8 internationalization collation data-migration

这里的第一个问题。已经很久没见了,非常感谢这个网站提供的巨大帮助。

因此,我们完成了将包含数百个遗留组件的相当大的系统迁移到UTF8。感谢所有的鱼,Latin1,但UTF8是未来,这次迁移是强制性的。

所以,除了在MySQL上搜索LIKE之外,一切都很有用。我在这里搜索了其他问题,但他们都解决了latin1的主要问题 - > utf8迁移,但不搜索,REGEX和LIKE ....

例如,我尝试

SELECT * FROM CITIES,其名称类似'%SAO PAULO%'

并获得零结果

SELECT * FROM CITIES,其名称类似'%SÃOPAULO%'

并获得预期结果(注意A上的波浪号)。

使用latin1默认排序规则latin1_swedish执行预期的操作,将A视为Ã,将C视为Ç。但是没有一个UTF8校对可以做到这一点。

我该怎么办?任何帮助将不胜感激。谢谢大家,我希望为这个社区做出贡献,就像它为我自己的工作做出贡献一样。

2 个答案:

答案 0 :(得分:1)

我会冒险猜测并说你正在使用utf8_bin。您需要使用utf8_unicode_ci进行正确的比较,就像您尝试做的那样。它稍慢,但更正确。

答案 1 :(得分:0)

也许您可以使用CONVERT函数将LATIN1转换为UTF8:http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

此外,也许转换有问题,以下链接看起来像是一个很好的指南,用一些基本的* NIX命令将数据库转换为UTF8:http://en.gentoo-wiki.com/wiki/Convert_latin1_to_UTF-8_in_MySQL

希望这有点道理。祝你好运!