前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySql查询不区分大小写解决方案

MySql查询不区分大小写解决方案

作者头像
翎野君
发布于 2023-05-12 12:49:14
发布于 2023-05-12 12:49:14
2.9K00
代码可运行
举报
文章被收录于专栏:翎野君翎野君
运行总次数:0
代码可运行

背景

当我们输入不管大小写都能查询到数据,例如:输入 lingyejun 或者Lingyejun ,LingYeJun都能查询同样的结果,说明查询条件对大小写不敏感。 CREATE TABLE NAME(name VARCHAR(10));

对这个表,缺省情况下,下面两个查询的结果是一样的:

SELECT * FROM TABLE NAME WHERE name='lingyejun';

SELECT * FROM TABLE NAME WHERE name='Lingyejun';

办法

解决方案一:

于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。

通过查询资料发现需要设置collate(校对) 。 collate规则

  •  *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
  •  *_cs: case sensitive collation,区分大小写
  •  *_ci: case insensitive collation,不区分大小写

一般而言我们设置字符集注意以下两种:

utf8_general_ci --不区分大小写

utf8_bin--区分大小写

当字符设置为不区分大小写时的解决办法:

1.可以将查询条件用binary()括起来。  比如:  

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from TableA where binary columnA ='lingyejun';

2. 可以修改该字段的collation 为 binary

比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

解决方案二:

mysql查询默认是不区分大小写的 如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from some_table where str=‘lingyejun';
select * from some_table where str='LINGYEJUN';

得到的结果是一样的,如果我们需要进行区分的话可以按照如下方法来做:

第一种方法: 要让mysql查询区分大小写,可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from some_table where binary str='lingyejun'
select * from some_table where binary str='LINGYEJUN'

第二方法:

在建表时时候加以标识

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table some_table(
   str char(20) binary
)

原理:

对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的 校对规则。BINARY属性是指定列字符集的二元 校对规则的简写。排序和比较基于数值字符值。因此也就自然区分了大小写。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据之舞——在MySQL中奏响数据库操作的乐章
在数字的世界里,MySQL像是一艘承载数据的船,带领我们穿越信息的海洋。每一条SQL语句,都是我们与数据库之间的语言桥梁。我们借助这些命令,去查询隐藏在深处的答案,去更新和重组混乱的片段。在这条旅途中,逻辑与技巧是我们的罗盘,指引我们穿越复杂的表结构与关系。
suye
2025/05/29
890
数据之舞——在MySQL中奏响数据库操作的乐章
Mysql 查询区分大小写的两种方法
oracle中查询默认是区分大小写的,但是在mysql中默认不区分大小写。 解决办法: mysql可以在SQL语句中加入 binary来区分大小写。BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。 一、查询语句上加binary select * from users WHERE binary user_name = '张三' AND status != 0 二、建表时加binary
chenchenchen
2021/09/06
2.1K0
从零开始学Mysql - 字符集和编码(上)
从零开始学Mysql - 字符集和编码(上) 前言 上一节我们系统的阐述了关于系统配置的相关细节内容,而这一节我们需要了解关于字符集和编码的内容,字符集和编码的规则其实也算是入门mysql经常遇到的
阿东
2021/12/08
8410
从零开始学Mysql - 字符集和编码(上)
MySQL存储的字段是不区分大小写的,你知道吗?
之前写过一篇关于mysql 对表大小写敏感的问题(你有遇到过MySQL因大小写敏感导致的问题吗),其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。
全栈程序员站长
2022/07/20
5.3K0
明明表中没这条数据,竟然还能查出来?
我之前写过一篇文章《明明加了唯一索引,为什么还是产生重复数据?》,发表之后,被很多博主转载过,引起了全网很多读者的共鸣。
苏三说技术
2024/11/06
1290
明明表中没这条数据,竟然还能查出来?
mysql utf8mb4_general_ci 不区分大小写
主要包含了三种: 以_ci结尾的。 以_bin结尾的。 以_cs结尾的。 ci是case insensitive的缩写,意思是大小写不敏感,即忽略大小写。 cs是case sensitive的缩写,意思是大小写敏感,即区分大小写。 还有一种是bin,它是将字符串中的每一个字符用二进制数据存储,区分大小写。
oktokeep
2024/11/23
2530
MySQL查询区分大小写
晓松
2024/12/23
4730
MySQL查询区分大小写
mysql大小写敏感与校对规则
模糊匹配 jg%,结果以JG开头的字符串也出现在结果集中,大家很自然的认为是大小写敏感的问题。那么mysql中大小写敏感是如何控制的;数据库名,表名,字段名这些字典对象以及字段值的大小敏感是如何控制的;以及校验规则与索引的关系,这是本文要讨论的内容。
我的小碗汤
2018/08/22
5.3K0
mysql大小写敏感与校对规则
从一个慢查询到MySQL字符集编码
最近在完成一个线上日志修复工作的过程中遇到了一个意想不到的慢查询。当时使用的SQL以及表结构其实都很简单,而且在关键的字段上也有索引,但是MySQL的执行计划就是跑出来了Range checked for each record (index map: 0x1)。如下为问题中的表结构定义和执行计划(删减了其他字段,留下了关键的部分):
DBA札记
2024/01/09
4870
从一个慢查询到MySQL字符集编码
mysql中的字符集和校验规则
在MySQL中,最常见的字符集有ASCII字符集、latin字符集、GB2312字符集、GBK字符集、UTF8字符集等,下面我们简单介绍下这些字符集:
AsiaYe
2019/11/06
2.4K0
mysql中的字符集和校验规则
MySQL系列之字符类型学习笔记
如图,选择一下collation,5.7.22版本的,大部分都是以ci结尾的,也就是大小写不敏感
SmileNicky
2022/05/07
5640
MySQL系列之字符类型学习笔记
MySQL 字符集与大小写敏感性解析
MySQL 字符集搭配不同的排序规则(Collation)可能会影响查询的大小写敏感性。
沈唁
2025/02/26
1950
MySQL 字符集与大小写敏感性解析
库的操作(MySQL)
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则 是:utf8_ general_ ci
ljw695
2024/11/21
1090
MySQL中的大小写敏感
今天同事问了一个问题,是关于MySQL大小写敏感的。 如果根据关键字case来搜索,会发现有两个参数。 mysql> show variables like '%case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names |
jeanron100
2018/03/21
2.8K0
【MySQL从入门到精通】【高级篇】(一)字符集的修改与底层原理
今天正式开始MySQL的学习,基础部分的学习先跳过,直接进入高级部分的学习。本文主要参考B站中的MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!
码农飞哥
2022/12/08
1K0
【MySQL从入门到精通】【高级篇】(一)字符集的修改与底层原理
MySQL如何设置不区分大小写
本文将深入探讨MySQL数据库中如何设置不区分大小写,并针对不同操作系统以及使用Navicat等工具的情况进行详细介绍。通过了解如何设置不区分大小写,您可以更好地管理MySQL数据库,提高工作效率。
默 语
2024/11/20
9180
MySQL 关键字专题(包含COLLATE)
SQL 是由关键字组成的语言,关键字是一些用于执行 SQL 操作的特殊词汇。在命名数据库、表、列和其他数据库对象时,一定不要使用这些关键字。因此,这些关键字是一定要保留的。
acc8226
2022/05/17
1.6K0
utf8字符集下的比较规则
在MySQL中,比较常用的字符集是utf8和utf8mb4。这两个字符集是类似的,utf8是utf8mb3的别名,所以之后在MySQL中提到utf8就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,需要使用utf8mb4。其实每个字符集下对应着若干个比较规则(也可以翻译为排序规则或校对规则,英文是COLLATE),同一字符集下,使用不同的比较规则会影响字符字段的比较和排序。本文以utf8为例,介绍下常用的几个比较规则的不同。
MySQL技术
2020/05/19
1.5K0
关于MySQL库表名大小写问题
一般在数据库使用规范中,我们都会看到这么一条:库名及表名一律使用小写英文。你有没有思考过,为什么推荐使用小写呢?库表名是否应该区分大小写呢?带着这些疑问,我们一起来看下本篇文章。
MySQL技术
2021/07/05
8K0
【MySQL】003. MySQL操作库
💦创建数据库的本质就是在/var/lib/mysql/路径下创建一个目录 删除数据库
_孙同学
2025/04/17
760
【MySQL】003. MySQL操作库
相关推荐
数据之舞——在MySQL中奏响数据库操作的乐章
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档