美文网首页PHP开发程序园
MySQL匹配不区分大小写怎么解决

MySQL匹配不区分大小写怎么解决

作者: 小马过河R | 来源:发表于2020-09-23 10:11 被阅读0次

场景是这样的,小马在搞一个类似匹配口令兑换奖励的项目,比如类似淘口令,aaBbC兑换礼品 A礼包。最简单的实现方式就是MySQL记录口令码和礼包映射,然后查询匹配。一切似乎看起来没啥问题,然而产品提出了一个问题,如果用AaBbC或者AABbC也能兑换成功,说明MySQL的查询语句是能匹配的。本质上,如果业务允许这么兼容大小写匹配也问题不大,但是因为一些其他问题的设置,比如根据口令码缓存,那么就会很多的缓存key,显然不是很合理。于是,就有了下面的分享。

mysql查询不区分大小写

小马的语句大概如下:

select * from TableA  where  keyword= 'aaBbC';

于是把语句换成:

select * from TableA  where  keyword= 'AaBbC';

果然是匹配的,说明查询条件对大小写不敏感。那么是什么问题呢?也就是SQL默认匹配字符集是不会区分大小写的。

两种解决方案

1、在SQL中使用BINARY

BINARY运算符将紧随其后的 string 转换为二进制字符串。

主要用来强制进行按字节进行比较(byte by byte),字节而不是字符的字符。这使得字符串比较是区分大小写的, 不管原始的列定义是否是 BINARY 或者 BLOB。BINARY 也对字符串末尾的空格敏感

于是改后语句如下:

select * from TableA  where  binary keyword= 'aaBbC';

小马亲测可行。但要注意此种解决方案中的SQL语法是否能被当前项目的DB层识别,因为有些是DB代理或者框架封装的DB底层可能不认识这个语法。

2、修改字段的字符集

ALTER  TABLE  TableA   MODIFY  COLUMN  keyword  VARCHAR(50)  BINARY  CHARACTER  SET  utf8 COLLATE utf8_bin;

对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的 校对规则

BINARY属性是指定列字符集的二元 校对规则的简写,排序和比较基于数值字符值。因此也就自然区分了大小写。

问题来了,如果直接设置成BINARY 类型呢,是不是也就直接支持了大小写匹配?

微微一笑

相关文章

  • nginx(二):符号语句

    一.正则表达式匹配,其中: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !和!*分别为区分大小写不匹配及不区分...

  • MySQL匹配不区分大小写怎么解决

    场景是这样的,小马在搞一个类似匹配口令兑换奖励的项目,比如类似淘口令,aaBbC兑换礼品 A礼包。最简单的实现方式...

  • 《MYSQL必知必会》笔记

    MYSQL必知: MSQL不区分大小写,在执行匹配的时候同样不区分 MYSQL语句必须以 ; 结束 Sql语句忽略...

  • Nginx 转发匹配规则,后端程序员必备知识点

    一、正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区...

  • Nginx配置文件nginx.conf详解

    一.正则表达式匹配,其中: ~ 为区分大小写匹配~* 为不区分大小写匹配!~ 和!~*分别为区分大小写不匹配及不区...

  • nginx 参数、变量和例子

    一.正则表达式匹配,其中: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写...

  • nginx之location匹配

    匹配规则 = 表示精确匹配 ~ 表示区分大小写的正则匹配,比如: ~* 表示不区分大小写的正则匹配 ^~ 表示 u...

  • Nginx 匹配规则

    无 :默认匹配,普通匹配 = :精确匹配 ~* :匹配正则表达式,不区分大小写 ~ :匹配正则表达式,区分大小写 ...

  • Mysql区分大小写(大小写敏感)配置

    Linux下 mysql 默认区分大小写 Windows下 mysql 默认不区分大小写 查看是否区分大小写 sh...

  • nginx重写规则

    nginx重写规则 nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大...

网友评论

    本文标题:MySQL匹配不区分大小写怎么解决

    本文链接:https://www.haomeiwen.com/subject/xrynyktx.html