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或设置collateutf8_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

创作不易,欢迎打赏,你的鼓励将是我创作的最大动力。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33468.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

4.5 TCP 报文段的首部格式

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 TCP 报文段的基本结构2 固定部分2.1 源端口与目的端口2.2 序号2.3 确认号2.4 数据偏移2.5 保留字段2.6 控制位2.7 窗口2.8 检验和2.9 紧急指针 3 可变部分3.1 选项3.2 填…

堆叠的简析

堆叠 堆叠的概念 堆叠是指将一台以上的交换机组合起来共同工作&#xff0c;以便在有限的空间内提供尽可能多的端口。‌ 堆叠技术可以通过专用连接电缆将多台交换机连接成一个堆叠单元&#xff0c;从而增加端口密度和管理效率。‌12 堆叠与级联有所不同。级联的交换机之间可以…

Qt复习学习

https://www.bilibili.com/video/BV1Jp4y167R9/?spm_id_from333.999.0.0&vd_sourceb3723521e243814388688d813c9d475f https://subingwen.cn/qt/qt-primer/#1-4-Qt%E6%A1%88%E4%BE%8B https://subingwen.cn/qt/ https://download.qt.io/archive/qt/1.1Qt的特点 1.2QT中的…

MySQL:函数

在MySQL中&#xff0c;为了提高代码重用性和隐藏实现细节&#xff0c;MySQL提供了很多函数。 在MySQL中&#xff0c;函数非常多&#xff0c;主要可以分为以下几类: 聚合函数数学函数字符串函数日期函数控制流函数窗口函数 聚合函数 在MySQL中&#xff0c;聚合函数主要由&…

同为科技(TOWE)柔性定制化PDU插座

随着科技的进步&#xff0c;越来越多的精密电子设备&#xff0c;成为工作生活密不可分的工具。 电子电气设备的用电环境也变得更为复杂&#xff0c;所以安全稳定的供电是电子电气设备的生命线。 插座插排作为电子电气设备最后十米范围内供配电最终核心部分&#xff0c;便捷、安…

javaweb-Day06~08

1.mysql数据库 单行注释的–注释后面要加空格才能真正实现注释&#xff0c;即“-- ” &#xff08;1&#xff09;所有的关系型数据库都是基于SQL语句的 2.DDL 3.数据库设计 4. DML 5.DQL &#xff08;1&#xff09;总 6.多表设计 &#xff08;1&#xff09;一对多 &#x…

基于遗传优化SVM的电机参数预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 数据收集与预处理 4.2模型构建与训练 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 输入&#xff1a;电机结构参数x1 x2 x3 x4 x5(分别是铁心高度 铁心厚度 绕组…

图形开发基础之在WinForms中使用OpenTK.GLControl进行图形绘制

前言 GLControl 是 OpenTK 库中一个重要的控件&#xff0c;专门用于在 Windows Forms 应用程序中集成 OpenGL 图形渲染。通过 GLControl&#xff0c;可以轻松地将 OpenGL 的高性能图形绘制功能嵌入到传统的桌面应用程序中。 1. GLControl 的核心功能 OpenGL 渲染上下文&…

PythonQt练习

下面是一个简单登录界面的搭建 import sys# 从PySide6中导入必要的模块&#xff0c;用于创建GUI界面 from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit from QtCore import Qt# 导入Qt Designer生成的UI文件 from TAJ import Ui_Form from secon…

【Windows系统下打造高效智能聊天平台LobeChat解锁远程协作新体验】

文章目录 前言1. LobeChat功能介绍2. 本地安装LobeChat3. 如何使用LobeChat工具4. 安装Cpolar内网穿透5. 实现公网访问LobeChat6. 固定LobeChat公网地址 前言 在这个数字化飞速发展的时代&#xff0c;人工智能已经深深地融入了我们的生活。从智能家居到自动驾驶&#xff0c;再…

基于ZYNQ-7000系列的FPGA学习笔记7——按键控制蜂鸣器(模块化编写)

基于ZYNQ-7000系列的FPGA学习笔记7——按键控制蜂鸣器&#xff08;模块化编写&#xff09; 1. 实验要求2. 功能分析3. 模块设计4. 波形图4.1 按键消抖模块4.2 按键控制蜂鸣器模块 5.代码编写5.1 rtl代码5.2 测试代码 6. 代码仿真7. 添加约束文件并分析综合 在上期的内容中&…

Linux 文本处理三剑客基本用法

Linux文本处理三剑客 - grep sed awk 1. 基本用法 grep 是一种强大的文本搜索工具&#xff0c;用于在文件中搜索指定的模式&#xff08;通常是字符串或正则表达式&#xff09;&#xff0c;并输出匹配的行。以下是 grep 的一些基本用法&#xff1a; 基本语法 grep [选项] 模式…

美畅物联丨智能监控,高效运维:视频汇聚平台在储能领域的实践探索

在当今全球能源格局不断变化的大背景下&#xff0c;对清洁能源的需求正以惊人的速度增长。储能项目作为平衡能源供需、提升能源利用效率的关键环节&#xff0c;其规模和复杂度也在不断攀升。在储能项目的运营管理过程中&#xff0c;安全监控、设备运维以及数据管理等方面面临着…

记一次跑前端老项目的问题

记一次跑前端老项目的问题 一、前言二、过程1、下载依赖2、启动项目3、打包 一、前言 在一次跑前端老项目的时候&#xff0c;遇到了一些坑&#xff0c;这里记录一下。 二、过程 1、下载依赖 使用 npm install下载很久&#xff0c;然后给我报了个错 core-js2.6.12: core-js…

【AI系统】推理引擎架构

推理引擎架构 在深入探讨推理引擎的架构之前&#xff0c;让我们先来概述一下推理引擎的基本概念。推理引擎作为 AI 系统中的关键组件&#xff0c;负责将训练好的模型部署到实际应用中&#xff0c;执行推理任务&#xff0c;从而实现智能决策和自动化处理。随着 AI 技术的快速发…

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

安装python&#xff0c;pycharm&#xff0c;自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …

微信小程序购物车全选反选功能以及合计

微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意&#xff1a;checkbox原生不支持bind:change事件&#xff0c;checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…

Linux输入设备应用编程

本章学习输入设备的应用编程&#xff0c;首先要知道什么是输入设备&#xff1f;输入设备其实就是能够产生输入事件的设备就称为输入设备&#xff0c;常见的输入设备包括鼠标、键盘、触摸屏、按钮等等&#xff0c;它们都能够产生输入事件&#xff0c;产生输入数据给计算机系统。…

Unity 利用Button 组件辅助Scroll View 滚动

实现 创建枚举类ScrollDir 以区分滚动方向。每组两个按钮负责同方向上左右/上下滚动。 Update 中实时获取Scroll View 滚动条当前位置。 if (dir.Equals(ScrollDir.vertical)) {posCurrent scroll.verticalNormalizedPosition; } else if (dir.Equals(ScrollDir.horizontal)…

Mac快速安装 chromedriver驱动

全篇大概1200字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间5分钟。 什么是chromedriver&#xff1f; ChromeDriver 充当了 Selenium WebDriver 和 Chrome 浏览器之间的桥梁&#xff0c;允许开发者通过编程控制浏览器进行自动化测试或操作。 一、下载chromedriver…