为何在MySQL中使用LIKE查询包含10.1.1.2的记录?
为什么你的MySQL LIKE查询能匹配到该记录?
这是因为MySQL的LIKE操作符是基于子串匹配逻辑工作的,咱们一步步拆解你的场景:
- 首先看你的查询条件:
dst like '%10.1.1.2%'- 这里的
%是通配符,代表任意长度(包括0)的任意字符,整个条件的意思是:只要dst字段的内容里,包含10.1.1.2这个连续的子串,就会被筛选出来。
- 这里的
- 再看被匹配到的
dst值:10.1.1.1-10.1.1.254- 这个字符串里的后半段是
10.1.1.254,其中完整包含了10.1.1.2这个子串(从第13个字符到第19个字符),完全符合LIKE的匹配规则,所以这条记录被成功检索出来。
- 这个字符串里的后半段是
如果你需要精确匹配完整IP怎么办?
如果你的实际需求是匹配完整的10.1.1.2IP地址,而不是包含它的子串,那可以调整查询方式:
- 直接用精确等于:
dst = '10.1.1.2' - 用正则表达式匹配完整单词(避免部分匹配):
这里select ordering, dst from alist where ordering=2 and dst REGEXP '[[:<:]]10.1.1.2[[:>:]]';[[:<:]]和[[:>:]]是MySQL的单词边界匹配符,确保匹配的是完整的10.1.1.2,而不是10.1.1.254这类包含它的字符串。
内容的提问来源于stack exchange,提问作者neohwang
相关产品推荐
相关产品推荐

