mysql数据库字符集查看结果是empty set

等等,还有个事,我上次在咖啡馆碰到个程序员,他调试MySQL就是卡在这个问题上。
那天阳光正好,他盯着笔记本屏幕,眉头皱得像打了结。
他试了半天,突然说"等等,是不是忘了改字符集?"然后敲了句setnamesutf8 ,结果屏幕上"Emptyset"瞬间变成了一堆乱码。
他愣了一下,马上又敲了句setnamesgbk,数据就正常显示了。
这让我想起,有时候问题就出在这么一个小细节上。

MySQL如何通过参数查看数据库使用的字符集信息

直接用SHOW VARIABLES LIKE '%character_set_%'就查了。

上周刚处理一个客户问这个,特简单。
你试试?
比如查服务器默认的,就输入:SHOW VARIABLES LIKE 'character_set_server';
看当前连接的,输入:SHOW VARIABLES LIKE 'character_set_client';
数据库字符集,先切换库,再用那个命令。

你自己看。

mysql用语句怎么查询字符集

说实话,你这几步操作写得挺清楚的。
直接用 show variables like '%char%' 查服务器全局字符集,用 show table status 看表级字符集,最后用 show full columns 查字段级字符集,这个流程没毛病。

有意思的是,你查到的结果里 character_set_server、character_set_database、character_set_connection 这些都显示是 utf8 ,表 countries 的 collation 也是 utf8 _general_ci,字段也都跟着用这个。
这说明你服务器的默认设置和这个表的配置是一致的,都是用 UTF-8 编码的。

不过话说回来,虽然 utf8 _general_ci 是最常用的,但 "ci" 这个校对规则(case-insensitive)可能不是所有场景都合适。
比如有些应用可能需要区分大小写搜索,这种情况下 utf8 _bin 会更严格。
你当时测试过这种场景吗?没试过的话,建议抽空对比下 utf8 _general_ci 和 utf8 _bin 在实际查询中的差别,比如查 SELECT FROM countries WHERE countries_name = 'China' 时用这两种规则返回的结果会不会不一样。

还有个细节,你查 character_set_filesystem 是 binary,这挺正常的,MySQL 文件系统默认就是二进制存储字符。
但说实话,这块我没亲自跑过,只是按文档理解应该是这样。

总的来说,你现在的配置是标准 UTF-8 ,能用得没问题,但具体选哪种校对规则,还得看你的业务需求。
数据量大的时候,校对规则的选择有时会直接影响查询性能,这块你当时留意过吗?