MariaDB中UUID_TO_BIN返回乱码 求Hex格式输出解决方案
问题排查与解决方法
问题原因
核心差异来自客户端连接的字符集设置,而非数据库/表的字符集本身:
- 本地Windows环境中,客户端默认使用
utf8mb4字符集连接数据库,MariaDB会自动将BINARY(16)类型的输出转换为十六进制字符串(如0x11edbe57536d750480c2c025a57a3115)展示。 - 生产Linux环境中,客户端使用
latin1字符集连接,数据库会把二进制字节直接按latin1编码解析为可见字符,也就是你看到的乱码。 - 两种环境下的二进制数据本身是完全正确的,所以
BIN_TO_UUID能正常还原原始UUID。
无侵入解决方法(无需修改数据库/表字符集)
方法1:查询时手动转换为十六进制
直接用HEX()函数包裹UUID_TO_BIN的结果,强制输出十六进制格式,不受客户端字符集影响:
SELECT HEX(UUID_TO_BIN(UUID(), 0));
方法2:临时修改当前会话的字符集
仅对当前数据库连接生效,不会影响全局配置或其他业务:
-- 临时设置会话字符集为utf8mb4 SET NAMES utf8mb4; -- 再执行查询即可得到十六进制格式结果 SELECT UUID_TO_BIN(UUID(), 0);
方法3:调整客户端工具的连接字符集
如果是用可视化工具(如Navicat、DBeaver)连接生产库,直接在工具的连接设置中把字符集改为utf8mb4,工具会自动处理二进制数据的显示格式,无需修改数据库配置。
注意事项
不要随意修改数据库或表的全局字符集,这可能引发现有数据的编码兼容性问题,以上方法均为无侵入式操作,安全可靠。
内容的提问来源于stack exchange,提问作者Codeboy Newbie
相关产品推荐
相关产品推荐

