在测试一些代码时,我偶然发现了以下 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 中运行测试,我也会收到“非法混合排序规则”错误,除非我在启动应用程序后运行此修复程序(在 Workbench 中):
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'
我发现这个老问题(MySQL 工作台字符集 https://stackoverflow.com/questions/6860086/mysql-workbench-charset)似乎不可能覆盖设置,但即使我花了太多时间搜索配置,我也不敢相信情况仍然如此?
现在,恐怕你将不得不忍受这一点。 MySQL 有一个 WL 将该编码重命名为 utf8(丢弃现有的 3 字节变体)。因此,在 MySQL Workbench 中保留 utf8 是有意义的,否则我们必须为不同的服务器使用不同的设置,这会使事情变得更加复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)