MySQL的like下划线问题

昨天在修复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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞