mysql 查询 大小写不敏感 踩坑记录

204 阅读1分钟

先看问题

  • varchar 大小写不敏感

【app_name】字段为varchar(64)类型

SELECT * FROM tb_app le WHERE le.app_name = 'order-goodsDetail'

改为:

SELECT * FROM tb_app le WHERE BINARY le.app_name = 'order-goodsDetail'

  • 正则大小写不敏感

SELECT * FROM tb_app le WHERE le.app_name REGEXP '^[a-z][0-9a-z-]{2,48}[a-z0-9]$'

以上我正则匹配应用名都是小写,但大写也匹配出来了 按照以下修改即可大小写敏感查询,注意 BINARY 是加在列名前,而不是REGEXP前:

SELECT * FROM tb_app le WHERE BINARY le.app_name REGEXP '^[a-z][0-9a-z-]{2,48}[a-z0-9]$'

分析

MySQL中的utf8实质上不是标准的utf8,大家可以自行查询下这个历史问题,可以重新设置字符集来进行修复

image.png

参考文章

MySQL: is a SELECT statement case sensitive?