我目前使用的是MySQL Workbench 8.0.21。如果我按下表编辑器窗口的扳手图标,我总是得到相同的(错误的)归类***utf8mb4_0900_ai_ci***。但这并不是表的真实的排序规则!
我相信这一定是Workbench的一个bug,因为我尝试了不同的方法:
- 手动设置客户端的 collation_connection,但不起作用
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
SET collation_connection = utf8mb4_general_ci;
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'parts';
正确打印 utf8mb8_general_ci
- 尝试编辑 mysql.cnf
但同样没有效果:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
collation-server=utf8mb4_general_ci
#init-connect='SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;'
init-connect='SET collation_connection = utf8mb4_general_ci;'
character-set-server=utf8mb4
There似乎不是在连接MySQL Workbench时更改默认字符集/排序规则的解决方案。
设置 default_collation_for_utf8mb4 似乎仅对复制目的有效。关闭character-set-client-handshake是否是解决我的问题的替代方案?
您是否也在Workbench中经历过这种奇怪的行为?
1条答案
按热度按时间huwehgph1#
CHARACTER SET
是指表示字符的位。它对于在客户机(在您的例子中是Workbench)和服务器(mysqld
)之间发送(INSERT
,SELECT
)数据非常重要。它还为每个表的每个 * 列 * 指定。COLLATION
仅在比较(WHERE
)和排序(ORDER BY
)时才重要。排序规则很少对其他地方产生影响。utf8mb4
的默认排序规则是utf8mb4_0900_ai_ci
(适用于MySQL 8.0)。您需要关注
CHARACTER SET
,否则在客户端和服务器之间发送的字符可能会被损坏。你通常不需要担心
COLLATION
。SET NAMES
和character_set_connection
通过在 client 中指定编码来控制Insert/Select音译。(听起来你完全是在使用UTF-8
,所以不需要转换。是不是“错误的校对”在某个地方惹了麻烦?如果是,请具体说明。
你提到了“复制”;复制品是不是遇到了什么麻烦