我正在使用安装了 xampp 1.8.3-2 和 mysqlserver 版本 5.6.14 的 Debian 服务器。在旧数据库中,由于像ä,ö,ü,ß等德语字符,latin1_german2_ci被用作数据库和表的字符排序规则。现在,我必须将表的排序规则转换为utf8_unicode_ci(数据库的排序规则)仍在 latin1_german2_ci 中)。但在那之后,像这样的查询将不再产生正确的答案。也就是说,它不仅提供了 kö
的所有内容,还提供了 ko
的所有内容。我该如何解决这个问题?
SELECT * FROM users Where lastname like "%kö%"
编辑:刚刚找到一个使用COLLATE
的解决方案:
SELECT * FROM users Where lastname like "%kö%" COLLATE utf8mb4_german2_ci
但是,这必须根据使用的服务器连接排序规则进行调整,因此如果服务器连接排序规则是 utf8_unicode_ci,则查询必须更改为
SELECT * FROM users Where lastname like "%kö%" COLLATE utf8_german2_ci
所以我现在的问题是:有没有更好/更优雅的方法来解决我的问题?数据库中是否有任何选项可以防止这种情况发生?
最佳答案
尝试将表的字符集设置为 UTF-8,将排序规则设置为 utf8_*,并确保没有 _ci 和结尾(_ci 表示“不区分大小写”),否则 MySQL 将执行不区分大小写和重音的搜索。
关于mysql 在 win7 和 debian8 上产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35791018/