如何让MySQL在字符串比较时识别控制字符,使指定比较返回0?
MySQL字符串比较忽略控制字符的解决方案
问题原因
你遇到的情况是因为MySQL大部分字符集的排序规则(比如latin1_swedish_ci)会忽略非打印的控制字符(像ASCII 1的SOH),导致包含控制字符的字符串和原字符串被判定为相等。
可行解决方案
强制二进制比较
- 直接在查询中使用
BINARY关键字,强制逐字节对比:SELECT BINARY 'data' = 'dataSOH'; - 或者指定二进制排序规则进行比较,比如匹配你的默认字符集使用
latin1_bin:SELECT 'data' COLLATE latin1_bin = 'dataSOH';
这两种方式都会严格检查每个字节的数值,SOH控制字符会被识别,查询会返回
0。- 直接在查询中使用
使用二进制类字符集/排序规则
如果需要长期生效,可以将表字段的字符集改为binary类型,或者将排序规则设置为二进制类(如utf8mb4_bin、latin1_bin),这样默认的字符串比较就会严格区分控制字符。
内容的提问来源于stack exchange,提问作者Rasheduzzaman Sourov
相关产品推荐
相关产品推荐

