加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中varchar的大小写字符相比

发布时间:2022-01-19 13:41:23 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍MySQL中varchar的大小写字符比较,在日常操作中,相信很多人在MySQL中varchar的大小写字符比较问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答MySQL中varchar的大小写字符比较的疑惑有所帮助!接下来,请跟
      这篇文章主要介绍“MySQL中varchar的大小写字符比较”,在日常操作中,相信很多人在MySQL中varchar的大小写字符比较问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL中varchar的大小写字符比较”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
  
背景:
      程序某日提出的SQL问题, 发现比较varchar字符串内容的时候, 大小写不敏感;
测试环境还原问题, 环境构造如下:
 
 
create table case_sen(id int primary key, name varchar(32)notnull);
insert into case_sen values(1,'LucyLoveLily');
insert into case_sen values(2,'lucylovelily');
insert into case_sen values(3,'TomHateLarry');
insert into case_sen values(4,'tomhatelarry');
 
实际上程序希望只有id=1的匹配到,  
同样的问题也出现在like里面:
 
程序有问是不是lower_case_table_names的问题, 显然.........不是 _(:з」∠)_
 
场景:
MySQL-5.7进行的还原, 实际上这个问题和版本没有关系;
 
 
分析:
首先可以确认的是, 表内的数据并没有问题, 该大写的还是大写, 该小写的还是小写;
 
那么问题最有可能出在MySQL的运算符"="和like上, 这两类运算的原理可能因为某些原因/设置/导致不进行大小写区分;
 
排查方向定下来以后, 试着用关键字comparison, case sensitive在文档里面找找, 发现有一个章节提到了这个问题,并给出了一些示例;
PS: 章节名  B.5.4.1 Case Sensitivity in String Searches
 
对文档的描述进行归纳:  非binary类型的string进行逻辑运算时, 会依据collate的配置来计算结果;
 
所以如果collate的设置对大小写不敏感, 那么就会出现测试环境中的效果;
 
那么问题来了, utf8mb4的默认collate是什么?
 
发现是utf8mb4_general_ci, 通过对文档内容的分析, 这个后缀ci代表的意思应该就是case-insensitive ;

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读