昨天在修复Bug的时候,碰到一个很有意思的问题,涉及到MySQL查询时下划线的处理,在这里和大家分享一下,希望大家别犯相同的错误
表字段格式
mysql> select DISTINCT(chaptertype) from XXX
+-------------+
| chaptertype |
+-------------+
| 1_1000 |
| 2_1000 |
| 1_300 |
| 2_300 |
+-------------+
查询sql语句
mysql> SELECT chaptertype FROM XXX WHERE v_id = XXX AND chaptertype LIKE '%1_%'\G;
*************************** 1. row ***************************
chaptertype: 1_300
*************************** 2. row ***************************
chaptertype: 1_1000
*************************** 3. row ***************************
chaptertype: 2_1000
3 rows in set (0.00 sec)
出现问题
我只需要查询chaptertype
字段以1_
开头的数据,可是为什么会select出2_1000
这条数据
问题原因
在MySQL的like
语句中,_
不是代表普通的下划线,而是代表一个字符,LIKE 'chaptertype %1_%'
相当于匹配chaptertype
字段包含1X
(X代表任意字符)字符串,而表中恰好2_1000
符合匹配条件,所以就把以2_
开头的数据给匹配出来了。如果要匹配下划线,需要加转义符chaptertype LIKE '%1\_%'
如果这篇文章对你有帮助,请点个赞哈,感谢