MySQL 大小写敏感配置

MySQL 大小写敏感配置

介绍

MySQL 中,数据库对应数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性

在大多数 Unix 中数据库名和表名对大小写敏感,而在 Windows 中对大小写不敏感。一个显著的例外情况是 Mac OS X ,它基于 Unix 但使用默认文件系统类型(HFS+),对大小写不敏感。然而,Mac OS X 也支持 UFS 卷,该卷对大小写敏感,就像 Unix 一样。

lower_case_file_system 参数(只读)

表示当前系统文件是否大小写敏感,只读参数,无法修改

  • ON: 大小写不敏感
  • OFF: 大小写敏感

lower_case_table_names 参数

Unixlower_case_table_names 默认值为 0Windows 下默认值是 1Mac OS X 下默认值是 2

  • 0: 使用 CREATE TABLECREATE DATABASE 语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如 WindowsMac OS x 上我们不能将该参数设为 0 ,如果在大小写不敏感的文件系统上将 --lowercase-table-names 强制设为 0 ,并且使用不同的大小写访问 MyISAM 表名,可能会导致索引破坏。
  • 1: 表名在硬盘上以小写保存,名称比较对大小写不敏感MySQL 将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为 Windows 的默认值。
  • 2: 表名和数据库名在硬盘上使用 CREATE TABLECREATE DATABASE 语句指定的大小写字母进行保存,但 MySQL 将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb 表名用小写保存。

由大小写敏感转换为不敏感方法

如果原来所建立库及表都是对大小写敏感的,想要转换为对大小写不敏感,主要需要进行如下3步:

  1. 将数据库数据通过 mysqldump 导出。
  2. my.cnfCentOS 下配置文件是 /etc/my.cnf )中更改最后添加 lower_case_tables_name = 1,然后重启 mysql 数据库
  3. 将导出的数据导入 mysql 数据库。

注:MySQL 8.0 开始,禁止在重新启动 MySQL 服务时将 lower_case_table_names 设置 成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值。该值只能在初始化 MySQL 之前设置。

命名规则

为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母。

在任何系统中可以使用 lower_case_table_names=1 。使用该选项的不利之处是当使用 SHOW TABLESSHOW DATABASES 时,看不出名字原来是用大写还是小写。

请注意在 Unix 中如果以前 lower_case_table_names = 0,在将 lower_case_table_names 设置为 1 时,重启 mysqld 之前,必须先将旧的数据库名和表名转换为小写。

字段名大小写不敏感

数据库字段名,大小写不敏感

字段值大小写敏感设置,字符集和排序规则

字段值的大小写由 mysql 的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则。

一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以 _ci(大小写不敏感)、_cs(大小写敏感)或 _bin(二元)结束 。比如 utf8 字符集,utf8_general_ci 表示不区分大小写,这个是 utf8 字符集默认的校对规则; utf8_general_cs 表示区分大小写,utf8_bin 表示二进制比较,同样也区分大小写 。

参考:
https://blog.csdn.net/lishuoboy/article/details/84562007
https://zhuanlan.zhihu.com/p/147720463

Built with Hugo
主题 StackJimmy 设计