MySQL Workbench连接编码

7

在测试一些代码时,我遇到了以下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 Workbench时,它似乎被强制为UTF-8编码。因此,即使我的应用程序正常工作,如果我想直接在MySQL Workbench中运行测试,我会收到“collation混合不合法”的错误,除非我在启动应用程序后在Workbench中运行此修复操作。
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'

我找到了这个旧问题(MySQL Workbench charset),在那里似乎不可能覆盖设置,但即使我花费了太多时间搜索配置,我仍然无法相信这仍然是事实??

1个回答

2

目前来说,恐怕您只能接受这种情况。MySQL有一个WL(工作日志)来将该编码重命名为utf8(放弃现有的3字节变体)。因此,在MySQL Workbench中保持utf8是有意义的,否则我们必须为不同的服务器使用不同的设置,这会使事情更加复杂。


你知道UTF8更改计划何时实施吗?此外,我看到有多种解决临时位置的方法。例如,在连接级别上配置编码方式。或者,允许用户在连接到特定服务器后运行特定命令等等...目前看起来好像如果您想使用正确的UTF8,则必须手动覆盖硬编码的连接设置?为什么不采用更灵活的方式来处理这个问题呢? - Nicolas Bouvrette
关于时间表我不能说什么。就灵活性而言:这也会出现更多使某些东西失败的可能性。这总是一个权衡,越简单的东西,至少对于大多数用户来说,就越好。 - Mike Lischke
“在连接后运行”对于普通用户来说似乎很直观,对于高级用户来说也足够灵活。是否有一种方法可以为Workbench提出功能请求呢? :) 再次感谢您抽出时间回答。 - Nicolas Bouvrette
当然可以,在我们的错误跟踪器(http://bugs.mysql.com)中发布您的功能请求。 - Mike Lischke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接