MySQL Workbench连接编码

Nic*_*tte 6 mysql unicode utf-8 character-encoding mysql-workbench

在测试一些代码时,我偶然发现了以下MySQL错误:

Error Code: 1267. Illegal mix of collations (utf8_general_ci,IMPLICIT) and ( utf8mb4_general_ci,COERCIBLE) for operation '='
Run Code Online (Sandbox Code Playgroud)

我在标准的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'
Run Code Online (Sandbox Code Playgroud)

我发现这个老问题(MySQL Workbench charset)似乎无法覆盖设置,但即使我花了太多时间搜索配置,我也不敢相信这仍然是这样的情况?

Mik*_*hke 2

现在,恐怕你必须忍受这一点。MySQL 有一个 WL 将该编码重命名为 utf8(丢弃现有的 3 字节变体)。因此,在 MySQL Workbench 中保留 utf8 是有意义的,否则我们必须为不同的服务器使用不同的设置,这会使事情变得更加复杂。