MySQL8.0使用utf8mb4时CHAR函数返回十六进制而非特殊字符原因咨询
问题原因
- 你预期得到的
Çüéâäàåçêë是Latin1(ISO-8859-1)字符集下字节值128~137对应的字符,而你当前MySQL全局配置的字符集为utf8mb4,单字节值大于127的内容不属于utf8mb4的有效单字节字符,无法直接被解析为可见字符。 - MySQL的
CHAR()函数默认返回二进制字符串,未显式指定字符集时,查询结果会直接返回原始十六进制字节值0x80818283848586878889,不会自动转换为你预期的特殊字符。
解决方法
方法1:显式指定CHAR函数的字符集
在查询时直接指定用Latin1解析对应字节,即可返回预期结果,语句如下:
SELECT CONVERT(CHAR(128,129,130,131,132,133,134,135,136,137 USING latin1)) AS char_result;
方法2:临时调整会话级字符集
如果需要多次执行同类查询,可以临时修改当前会话的客户端字符集,操作完成后再改回原有配置即可:
-- 临时设置会话客户端字符集为latin1 SET SESSION character_set_client = latin1; -- 执行查询即可得到预期结果 SELECT CHAR(128,129,130,131,132,133,134,135,136,137); -- 操作完成后恢复为utf8mb4,避免影响其他业务 SET SESSION character_set_client = utf8mb4;
注意:不要随意修改全局级别的字符集配置,避免造成其他业务数据读写异常。
内容的提问来源于stack exchange,提问作者Danh Le
相关产品推荐
相关产品推荐

