MySQL大小写敏感、MySQL设置字段大小写敏感
文章目录
- 一、MySQL大小写敏感规则
- 二、设置数据库及表名大小写敏感
-
- 2.1、查询库名及表名是否大小写敏感
- 2.2、修改库名及表名大小写敏感
- 三、MySQL列名大小写不敏感
- 四、lower_case_table_name与校对规则
-
- 4.1、验证校对规则影响大小写敏感
- 4.1、验证校对规则影响排序
- 五、设置字段内容大小写敏感
-
- 5.1、查看和修改某个表的编码集
- 5.2、查看和修改某个字段的编码集
- 5.3、设置字段大小写敏感
- 5.4、查询时设置字段大小写敏感/不敏感
以下内容基于Mysql:8.0.20进行讲解。
所谓的大小写敏感指的是指的是大写与小写是两个两个值,而大小写不敏感指的是小写跟大写看做是一个值。
一、MySQL大小写敏感规则
Linux下:
- 数据库名与表名是严格区分大小写的;
- 表的别名是严格区分大小写的;
列名与列的别名在所有的情况下均是忽略大小写的;- 变量名也是严格区分大小写的;
Windows下:
- 都不区分大小写。
Mac OS下,文件系统类型HFS+,非UFS卷:
- 都不区分大小写。
MySQL中控制数据库名和表名的大小写敏感由参数lower_case_table_names控制,为0时表示区分大小写,为1时,表示将名字转化为小写后存储,不区分大小写。在不同的操作系统上,这个参数的默认值不同:
- Unix(包括Linux)下,默认值为0,表示对数据库名和表名的大小写是敏感的。
- Windows下,默认值为1,表示不敏感,即在存储和查找时会将名称转换为小写。
- macOS下,默认值为2,表示存储区分大小写,但在查询时会转换为小写。
官网介绍:https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

lower_case_table_names:
-
0: 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。
在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将此参数强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。 -
1: 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。
-
2: 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用innodb表名用小写保存。
在大小写不敏感的操作系统(Windows和macOS)中,不能将lower_case_table_names设置为0。如果需要在这些系统中设置大小写敏感,可以通过修改配置文件my.ini来更改lower_case_table_names的值。例如,在Windows下,可以将lower_case_table_names设置为2,并重启MySQL服务。
在创建表时,可以通过设置字段属性binary或使用collate规则来控制字段内容的大小写敏感性。例如,将字段标记为binary或设置collate为utf8_bin可以实现二进制大小写敏感。如果建表时未指定collate规则,也可以通过修改字段的collate属性来实现大小写敏感。
总结如下:
- 在Unix系统中,数据库名和表名的大小写是敏感的。
- 在Windows系统中,数据库名和表名的大小写不敏感,存储和查找时会转换为小写。
- 在macOS系统中,数据库名和表名的大小写是敏感的,但在查询时会转换为小写。
在大小写不敏感的系统中(Windows和macOS),不能将lower_case_table_names设置为0。- 可以通过修改配置文件或设置字段属性来控制大小写敏感性。
二、设置数据库及表名大小写敏感
2.1、查询库名及表名是否大小写敏感
可以通过 show variables like “%case%”; 查看当前Mysql关于大小写的设置,下面是我再Windows下执行的结果

根据上面对lower_case_table_names属性的讲解,我们发现windows中的值为1不区分大小写,而且创建的表名在数据库中是以小写存储的。
lower_case_file_system
该参数是用于描述mysql的数据目录data所在的操作系统是否为大小写敏感,该参数为boolean类型,但无法修改。
- 0 – 大小写敏感
- 1 – 大小写不敏感
比如跑在linux上的都是OFF或者0。
Linux默认参数结果:

2.2、修改库名及表名大小写敏感
mysql8.0更改lower_case_table_names
mysql8.0安装初始化之后是不能更改lower_case_table_names的
下面是官方文档的一段话:
In MySQL 8.0, the lower_case_table_names variable can only be configured when the MySQL server is initialized.
解决方法:
方法一:在初始化的时候就要设置好这个变量的值
方法二:删除数据目录,重新初始化(执行命令前切记先备份好数据,此方法并没有亲自试验过,切记慎重使用)
(1)删除数据目录datadir=/usr/local/mysql/data
-- 切记先备份好数据
rm -rf /usr/local/mysql/data
(2)在配置文件中[mysqld]下添加lower_case_table_names = 1
vim /etc/my.cnf[mysqld]
basedir=/usr/local/mysql # 基本路径
datadir=/usr/local/mysql/data #数据路径 (先在/usr/local/mysql建data目录)
socket=/usr/local/mysql/data/mysql.sock # socket文件
symbolic-links=0
log-error=/usr/local/mysql/data/mysqld.log #错误日志
pid-file=/usr/local/mysql/data/mysqld.pid #pid文件
**lower_case_table_names = 1** **#添加这行**[mysql]
socket=/usr/local/mysql/data/mysql.sock
[mysqldump]
socket=/usr/local/mysql/data/mysql.sock
(3)执行初始化命令
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lower-case-table-names=1
(4)检查变量的值
跳过授权表启动
mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &
免密登录
mysql -uroot -p 不需要输入密码直接回车show variables like '%lower_case_table_names%';
三、MySQL列名大小写不敏感
列名与列的别名在所有的情况下均是忽略大小写的 ,不管是Linux系统还是Windows系统下MySQL的列名都默认不区分大小写.
该测试在Windows下测试(配置为默认配置)

四、lower_case_table_name与校对规则
lower_case_table_name: 影响大小写敏感包括库名、表名、表别名等。校对规则(COLLATE):影响字段内容大小写敏感及排序规则。
MySQL常用排序规则有:utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin、utf8mb4_0900_ai_ci
_bin : 按二进制方式比较字符串,区分大小写和重音符号。
_ai_ci:按照特定语言或地区方式比较字符串,不区分大小写和重音符号。
_unicode_ci: 按 Unicode 标准方式比较字符串,不区分大小写和重音符号。
_general_ci:按一般方式比较字符串,不区分大小写和重音符号。
- bin:binary case sensitive ,binary 以二进制方式,区分大小写
- ci:即case insensitive,不区分大小写,即排序时 p 和 P相同 。
- cs:case sensitive 区分大小写
- ai: accent insensitive,指口音不敏感,不区分重音,即排序时 e,è,é,ê 和 相同。
- as:accent sensitive,即口音敏感,区分重音,也就是说,排序时 e,è,é,ê 和 互不相同。
- 0900: 是 Unicode 校对算法版本。
关于校对规则参考另一篇文章《MySQL字符集、字符编码、排序规则、MySQL设置字符编码、设置表字段编码》
大小写是否敏感
库名
表名
表别名
字段名
字段别名
字段内容
变量
lower_case_table_name = 0 utf8_general_ci
是
是
是
否
否
否
否
lower_case_table_name = 1 utf8_general_ci
否
否
否
否
否
否
否
lower_case_table_name = 0 utf8_bin
是
是
是
否
否
是
否
lower_case_table_name = 1 utf8_bin
否
否
否
否
否
是
否
4.1、验证校对规则影响大小写敏感
建表:
create table test1(name varchar(100), primary key(name));
create table test2(name varchar(100), primary key(name)) collate utf8_bin; 给表test1插入数据:
insert into test1(name) values('abc');
insert into test1(name) values('ABD');
insert into test1(name) values('ZBC');给表test2插入数据:
insert into test2(name) values('abc');
insert into test2(name) values('ABD');
insert into test2(name) values('ZBC');查表:
select * from test1 where name like 'a%';
select * from test2 where name like 'a%';

可以看出表1大小写不敏感,所以查询时包含a与A的都能查询出来;表2大小写敏感,所以只能查询出a的。
4.1、验证校对规则影响排序
查表:
select * from test1;
select * from test2 ;

可以看出区分大小写之后,两边的排序规则也不一样了。
五、设置字段内容大小写敏感
不管是windows还是Linux系统,mysql在任何系统上字符串内容默认是不区分大小写的。若想要字段内容区分大小写,可以设置字段编码大小写敏感。
5.1、查看和修改某个表的编码集
查看
show create table 表名;
或者
show table status from <数据库名/schema> like '<表名>';示例:show table status from test like 'tbl_test';
修改
alter table 表名 character set 编码格式 collate utf8_general_ci(编码规则);
如下sql:
drop table if exists tbl_test;
create table tbl_test(id int primary key auto_increment,name varchar(30) CHARACTER SET utf8 COLLATE utf8_bin unique not null,age int comment '年龄',address varchar(50) comment '住址',update_time datetime default null
) comment '测试表';-- 查询建表ddl语句
show create table tbl_test;

COLLATE后缀含义:
- _ci: case insensitive 不区分大小写
- _cs:case sensitive 区分大小写
- _ai: accent insensitive 不区分重音
- _as: accent sensitive 区分重音
- _bin:binary case sensitive collation,binary 以二进制方式,区分大小写
所以上面这个表整体字段的默认编码是utf8mb4_0900_ai_ci不区分大小写,但是其中的name字段编码为utf8mb3_bin区分大小写。
mysql中的编码参考另一篇文章《MySQL字符集、字符编码、排序规则、MySQL设置字符编码、设置表字段编码》
5.2、查看和修改某个字段的编码集
查看
方式一:
show create table 表名;
示例见上面的图片方式二:
show full columns from 表名 where field='字段名'例:show full columns from tb where field='id'
修改
alter table 表名 modify 字段名 字段数据类型 character set 字符编码 not null;例:alter table tb modify name varchar(10) character set utf8 not null;

5.3、设置字段大小写敏感
大小写敏感就是大写的A与小写的a是两个值,通过A查询时只能查询出A而不能查询出a。
从上面4.1、4.2中我们也可以看出如何设置大小写敏感了,这里再总结一下。
方式一:建表时设置字段大小写敏感
如下sql: 设置name字段大小写敏感
drop table if exists tbl_test;
create table tbl_test(id int primary key auto_increment,name varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin unique not null,age int comment '年龄',address varchar(50) comment '住址',update_time datetime default null
) comment '测试表';

方式二:建表后修改字段大小写敏感
alter table 表名 modify 字段名 字段数据类型 character set 字符编码 not null;示例:alter table tbl_test modify name varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin unique not null;
这里的字符编码用了utf8mb3_bin,还有一种编码是utf8mb4_bin,具体区别在哪里可以参考文章《 MYSQL(8.0版本及以上)- utf8,utf8mb3和utf8mb4的含义和由来》
5.4、查询时设置字段大小写敏感/不敏感
方式一:查询时设置字段编码为敏感
SELECT * FROM test1 WHERE name like '%B%' COLLATE utf8mb4_bin;
方式二:查询时设置字段编码为不敏感
SELECT * FROM test1 WHERE name like '%B%' COLLATE utf8mb4_general_ci;
参考:
官网介绍:https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html
创作不易,欢迎打赏,你的鼓励将是我创作的最大动力。

相关文章:
MySQL大小写敏感、MySQL设置字段大小写敏感
文章目录 一、MySQL大小写敏感规则二、设置数据库及表名大小写敏感 2.1、查询库名及表名是否大小写敏感2.2、修改库名及表名大小写敏感 三、MySQL列名大小写不敏感四、lower_case_table_name与校对规则 4.1、验证校对规则影响大小写敏感4.1、验证校对规则影响排序 五、设置字段…...
项目搭建:guice,jdbc,maven
当然,以下是一个使用Guice、JDBC和Maven实现接口项目的具体例子。这个项目将展示如何创建一个简单的用户管理应用,包括用户信息的增删改查(CRUD)操作。 ### 1. Maven pom.xml 文件 首先确保你的pom.xml文件包含必要的依赖&#…...
第四届新生程序设计竞赛正式赛(C语言)
A: HNUCM的学习达人 SQ同学是HNUCM的学习达人,据说他每七天就能够看完一本书,每天看七分之一本书,而且他喜欢看完一本书之后再看另外一本。 现在请你编写一个程序,统计在指定天数中,SQ同学看完了多少本完整的书&#x…...
【分布式知识】Redis6.x新特性了解
文章目录 Redis6.x新特性1. 多线程I/O处理2. 改进的过期算法3. SSL/TLS支持4. ACL(访问控制列表)5. RESP3协议6. 客户端缓存7. 副本的无盘复制8. 其他改进 Redis配置详解1. 基础配置2. 安全配置3. 持久化配置4. 客户端与连接5. 性能与资源限制6. 其他配置…...
程序员需要具备哪些知识?
程序员需要掌握的知识广泛而深厚,这主要取决于具体从事的领域和技术方向。不过,有些核心知识是共通的,就像建房子的地基一样,下面来讲讲这些关键领域: 1. 编程语言: 无论你是搞前端、后端、移动开发还是嵌…...
实验四:MyBatis 的关联映射
目录: 一 、实验目的: 熟练掌握实体之间的各种映射关系。 二 、预习要求: 预习数据库原理中所讲过的一对一、一对多和多对多关系 三、实验内容: 1. 查询所有订单信息,关联查询下单用户信息(注意:因为一…...
【Leetcode】189.轮转数组
题目链接: 189.轮转数组 题目描述: 解题思路: 要想实现数组元素向右轮转k个位置,可是将数组三次反转来实现 以 nums [1,2,3,4,5,6,7], k 3 为例,最终要得到[5,6,7,1,2,3,4]: 第一次反转:将整个数组反转…...
【JavaSE】常见面试问题
1. 什么是 Java 中的多态? 多态是 Java 中面向对象的核心特性之一,指的是同一操作作用于不同类型的对象时表现出不同的行为。通过方法重载和方法重写实现。方法重载是同一方法名,根据参数不同做不同处理,属于编译时多态ÿ…...
【超详图文】多少样本量用 t分布 OR 正态分布
文章目录 相关教程相关文献预备知识Lindeberg-Lvy中心极限定理 t分布的来历实验不同分布不同抽样次数的总体分布不同自由度相同参数的t分布&正态分布 作者:小猪快跑 基础数学&计算数学,从事优化领域7年,主要研究方向:MIP求…...
leetcode hot100【Leetcode 416.分割等和子集】java实现
Leetcode 416.分割等和子集 题目描述 给定一个非负整数的数组 nums ,你需要将该数组分割成两个子集,使得两个子集的元素和相等。如果可以分割,返回 true ,否则返回 false。 示例 1: 输入:nums [1,5,11,…...
《算法导论》英文版前言To the teacher第4段研习录:有答案不让用
【英文版】 Departing from our practice in previous editions of this book, we have made publicly available solutions to some, but by no means all, of the problems and exercises. Our Web site, http://mitpress.mit.edu/algorithms/, links to these solutions. Y…...
Laravel关联模型查询
一,多表关联 文章表articles 和user_id,category_id关联 //with()方法是渴求式加载,缓解了1N的查询问题,仅需11次查询就能解决问题,可以提升查询速度。with部分没有就以null输出,所以可以理解为 多表 left join 查…...
Clickhouse 数据类型
文章目录 字符串类型数值类型日期时间类型枚举类型数组类型元组类型映射类型其它类型 字符串类型 数据类型描述备注String可变长度字符串无长度限制,适用于存储任意字符FixedString固定长度字符串定长字符串,长度在创建时指定,如 FixedStrin…...
物联网智能项目如何实现设备高效互联与数据处理?
一、硬件(Hardware) 设备互联的基础,涵盖传感器、执行器、网关和边缘计算设备。 传感器与执行器 功能: 采集环境数据(如温度、湿度、运动等)并执行控制命令。优化方向: 低功耗、高精度传感器以…...
【云服务器】搭建博客服务
未完待续 一、云服务器二、1panel安装及其容器三、Halo博客 一、云服务器 选择了狗云服务器:狗云-高性价比的服务器 安装系统:Ubuntu22.04 前期配置: 修改ssh端口: 二、1panel安装及其容器 三、Halo博客 主题:butt…...
如何抽象策略模式
策略模式是什么 策略设计模式(Strategy Pattern)是一种面向对象设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。这种模式使得算法可以独立于使用它们的客户端而变化。 策略设计模式包含三个主…...
BERT模型的输出格式探究以及提取出BERT 模型的CLS表示,last_hidden_state[:, 0, :]用于提取每个句子的CLS向量表示
说在前面 最近使用自己的数据集对bert-base-uncased进行了二次预训练,只使用了MLM任务,发现在加载训练好的模型进行输出CLS表示用于下游任务时,同一个句子的输出CLS表示都不一样,并且控制台输出以下警告信息。说是没有这些权重。…...
node.js实现分页,jwt鉴权机制,token,cookie和session的区别
文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie,token,session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤,⽐如⼏万条数据,放在⼀个⻚⾯显⽰的话显然不友好,这时候就需要采⽤分⻚…...
34 基于单片机的指纹打卡系统
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC,采用两个按键替代指纹,一个按键按下,LCD12864显示比对成功,则 采用ULN2003驱动步进电机转动,表示开门,另一个…...
【Linux】用户操作命令
声明:以下内容均学习自《Linux就该这么学》一书 1、管理员root Linux系统的管理员之所以是root,并不是因为它的名字叫root,而是因为该用户的身份号码UID(User IDentification)的数值是0。UID相当于身份证号码&#x…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
