同一个 MySQL ,my.cnf 中配置了
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
执行以下 SQL
show variables like '%char%';
show variables like 'collation%';
MySQL cli 查询结果
Variable_name | Value |
---|---|
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
Variable_name | Value |
---|---|
collation_connection | utf8_general_ci |
collation_database | utf8_general_ci |
collation_server | utf8_general_ci |
navicat 、navicat 命令行、datagrip 结果
Variable_name | Value |
---|---|
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8mb4 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/local/mysql/share/charsets/ |
Variable_name | Value |
---|---|
collation_connection | utf8mb4_general_ci |
collation_database | utf8_general_ci |
collation_server | utf8_general_ci |
为何结果不同
1
Aluhao 2022-03-11 11:52:42 +08:00
建议直接使用:utf8mb4
|
3
LeslieWongH 2022-03-11 12:13:14 +08:00
|
4
katsusan 2022-03-11 12:54:36 +08:00 3
navicat 连接 mysql 成功后会执行几条命令: set names xxx; show variables like 'lower_case_%'; ...
如果连接信息里编码选的是 auto, 就会执行 set names utf8mb4.可以在你的命令行下试试看, 跟 navicat 一样的结果. |
5
PaperKite OP @katsusan #4 感谢。命令行执行了 set names utf8mb4 之后,确实和 navicat 一样的结果了,连接信息里编码也确实选的是 auto ; auto 切换成其他就跟最开始的命令行结果一致了。另外想问一下( navicat 连接 mysql 成功后会执行几条命令: set names xxx; show variables like 'lower_case_%'; ...)这个是如何了解到的
|
6
comlewin 2022-03-11 13:13:22 +08:00
这可能就叫经验
|
8
chengyiqun 2022-03-11 14:08:35 +08:00
@PaperKite #7 你可以启动 navicat 后按 ctrl+H 查看命令行历史, navicat 作为 GUI 工具, 是记录了命令行交互历史记录哒
|
9
PaperKite OP @chengyiqun 你说的是工具选项卡中的历史日志吗 我在里面没找到#4 说的内容
|
10
liprais 2022-03-11 14:11:15 +08:00
client 字符集是 client 设置的,你不设置当然就 follow server 的
|
11
chengyiqun 2022-03-11 14:12:45 +08:00
@PaperKite #9 不知道, 可能是 navicat 版本不一样吧, 我司的分布式数据库就是和新版 navicat 兼容性不好, 所以我至今还在用 navicat11
|
12
katsusan 2022-03-11 14:22:01 +08:00 1
@PaperKite #5
> 想问一下( navicat 连接 mysql 成功后会执行几条命令: set names xxx; show variables like 'lower_case_%'; ...)这个是如何了解到的 mysql 的 client 向 server 发送 query command 时用的是 text protocol, 在 unencrypted connection(no SSL)下用 tcpdump 抓包就能看到了. 协议在 https://dev.mysql.com/doc/internals/en/com-query.html. |