【发布时间】:2015-12-17 13:43:05
【问题描述】:
在测试一些代码时,我偶然发现了以下 MySQL 错误:
Error Code: 1267. Illegal mix of collations (utf8_general_ci,IMPLICIT) and ( utf8mb4_general_ci,COERCIBLE) for operation '='
我在标准 MySQL UTF-8 归类列上使用 WHERE 语句,该列包含一个使用 4 个字节的字符。除非我理解错了,否则我在阅读时发现了以下信息:
- MySQL 的原始 UTF-8 实现不完整(最多支持 3 个字节)
- 解决这个问题的方法是一个名为 utf8mb4 的新排序规则,它绝不是一种新的编码,而只是 MySQL 用来修补它们原来的错误。
我认为没有理由使用原始 MySQL UTF-8 实现,因为它不完整。所以我做了一些服务器端配置,以确保所有默认值都指向 utf8mb4。一切似乎都很好,但现在在我的应用程序上:我可以使用 ????我的表单中的字符,而不必担心 MySQL。
我现在的问题仍然是当我连接 MySQL Workbench 时,似乎编码被强制为 UTF-8。因此,即使我的应用程序工作正常,如果我想直接在 MySQL Workbench 中运行测试,我会收到“Illegal mix of collation”错误,除非我在启动应用程序后(在 Workbench 中)运行此修复:
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'
我发现这个老问题 (MySQL Workbench charset) 似乎无法覆盖设置,但即使我花了太多时间搜索配置,我也不敢相信情况仍然如此??
【问题讨论】:
标签: mysql unicode utf-8 character-encoding mysql-workbench