[转]MySQL的like下划线问题

原文地址:MySQL的like下划线问题 - 简书 (jianshu.com)

昨天在修复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\_%'



作者:Lee_DH
链接:https://www.jianshu.com/p/951991792b9e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2022-10-21 09:20  dirgo  阅读(565)  评论(0编辑  收藏  举报