【问题标题】:Illegal mix of collations (latin5_turkish_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='非法混合排序规则 (latin5_turkish_ci,IMPLICIT) 和 (latin1_swedish_ci,COERCIBLE) 用于操作 '='
【发布时间】:2010-12-14 19:48:47
【问题描述】:

我该如何解决

"Illegal mix of collations (latin5_turkish_ci,IMPLICIT) 
and (latin1_swedish_ci,COERCIBLE) 
for operation '='" problem? 

我的查询:select * from up where name='camış'

连接选项:

SET NAMES 'latin5'
SET character_set_connection = 'latin5'
SET collation_connection = latin5_turkish_ci

-- 我将排序规则更改为 latin5_turkish_ci 但不起作用。 几分钟后(大量查询),问题自行消失。

【问题讨论】:

  • camış是什么意思?

标签: php mysql character-encoding


【解决方案1】:

这是一个相当糟糕的主意,但应该可行:

SELECT * 
  FROM up 
 WHERE CONVERT(name USING latin5) COLLATE latin5_turkish_ci = 'camış'

好主意是将所有列转换为所需的字符集(这应该是 UTF-8)。

[+] 转换是指不改变表/列的默认排序规则,而是转换其中的所有数据。所以我会用目标字符集创建新列,用UPDATE table SET new_column = CONVERT(old_column USING characterset)填充它,删除旧列并重命名新列。

【讨论】:

  • 谢谢。我明白了。但是我已经用 alter table 改变了表的字符集。是否有另一个 mysql 语句?
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 2011-08-20
  • 2010-10-30
  • 2010-09-16
  • 2015-06-03
  • 2015-09-16
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多