非法混合的归类MySQL错误

Cli*_*ote 112 mysql sql mysql-error-1267

我在处理大量数据时遇到这个奇怪的错误......

Error Number: 1267

Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

SELECT COUNT(*) as num from keywords WHERE campaignId='12' AND LCASE(keyword)='hello again 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€'
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?我可以以某种方式逃避字符串,因此不会发生此错误,或者我是否需要以某种方式更改我的表格编码,如果是这样,我应该将其更改为什么?

Ben*_*hes 264

SET collation_connection = 'utf8_general_ci';
Run Code Online (Sandbox Code Playgroud)

那么你的数据库

ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

有时没有明智的理由,MySQL在那里偷偷溜过瑞典语.

  • @Ben:它最初由一家瑞典公司开发......这就是令人讨厌的latin1_swedish_ci初始设置背后的原因...... :( (13认同)
  • @Ben:感谢您提供可直接复制的解决方案.节省了我很多时间. (3认同)
  • 不,不是真的,事实上这是一个很糟糕的主意。连接的应用程序可能会设置字符集,并且可能会直接在 Web 上输出数据,其中的字符集标头现在与数据不匹配。这些命令在生产中非常危险,并且应该与连接到数据库的应用程序的任何潜在问题的审核相一致。 (2认同)

Qua*_*noi 12

您应该将表格编码和连接编码都设置为UTF-8:

ALTER TABLE keywords CHARACTER SET UTF8; -- run once
Run Code Online (Sandbox Code Playgroud)

SET NAMES 'UTF8';
SET CHARACTER SET 'UTF8';
Run Code Online (Sandbox Code Playgroud)


小智 8

CONVERT(column1 USING utf8)
Run Code Online (Sandbox Code Playgroud)

解决了我的问题.其中column1是给出此错误的列.

  • 对我来说,这有效: **CONVERT("column1" USING LATIN1)** (2认同)