我无法连接一些表,因为有些表/行是utf8_general_ci,有些是utf8_turkish_ci。因此,我不得不将土耳其语言转换为通用语言,并最终使用它。但是,我想知道,如果我将原始表从土耳其语转换为通用表,我的应用程序会发生什么?我在PHP中使用MySQL。
这是初始错误:Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_turkish_ci,IMPLICIT) for operation '='
发布于 2014-08-22 00:14:09
列的数据是使用字符集存储的。在这种情况下,它似乎是utf8。
当您对这些列进行操作(例如,进行相等比较或排序)时,MySQL将使用排序规则。每列都有一个默认排序规则,它从表的默认排序规则继承而来。
索引中内置了列的默认排序规则,因此它们可以有效地工作。
您可以进行由排序规则限定的相等比较。例如,在JOIN中,您可以指定
ON (turkish.village_name COLLATE utf8_general_ci) = euro.village_name或者也许
ON turkish.village_name = (euro.village_name COLLATE utf8_turkish_ci)这应该会消除非法的排序规则混合,而不需要更改表。这可能会帮助您避免您所询问的数据库更改。但要注意,使用COLLATE限定符可能会使索引的使用失败。如果您有一个很大的表,并且您依赖于索引来获得性能,那么这可能没有什么帮助。
那么,如果通过修改表来更改默认排序规则,会发生什么情况呢?
ORDER BY结果将是不正确的。但是,您可以通过在ORDER BY子句中指定COLLATE修饰符来解决此问题。
ORDER BY (euro.village_name COLLATE utf8_turkish_ci)https://stackoverflow.com/questions/25428529
复制相似问题