MySQL设置不区分大小写(大小写不敏感)的安装和配置方法

2021-11-28 900点热度 0人点赞 0条评论

问题描述

MySQL默认在Windows上是对大小写不敏感的(不区分大小写),但是默认在Linux上是区分大小写的。所以规范一点,为了避免奇奇怪怪的问题,还是建议开发和使用都区分大小写。

一般来说的规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母

检查是否启用大小写敏感

mysql> show variables like '%case_table%';
 +------------------------+-------+
 | Variable_name          | Value |
 +------------------------+-------+
 | lower_case_table_names | 0     |
 +------------------------+-------+
 1 row in set (0.00 sec)

以上0代表大小写敏感,1代表大小写不敏感

不过如果遇到特殊情况,或者因为老项目不适合修改代码,只能让MySQL数据库对大小写不敏感,要怎么做呢?

问题解决

MySQL中使用这个lower_case_table_names来控制的

  • 正常安装的情况:修改my.conf (一般是正常安装的,可能在/etc/my.cnf)

增加如下lower_case_table_names=1 (写在[mysqld]下),1代表大小写不敏感 0代表敏感,Linux下默认就是0:

lower_case_table_names=1
  • Docker安装的情况:

可以修改docker的启动参数:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --lower_case_table_names=1

当然如果是自定义的my.conf路径,也可以修改my.conf增加上面说的lower_case_table_names=1

# 指定my.cnf路径是 /storage/docker/mysql/my.cnf
docker run \
--detach \
--name mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-p 3306:3306 \
-v /storage/docker/mysql/my.cnf:/etc/my.cnf \
-v /storage/docker/mysql/mysql-data:/var/lib/mysql \
mysql/mysql-server

# /storage/docker/mysql/my.cnf中再配置:lower_case_table_names=1

问题补充

  • 遇到修改后,不能启动mysql或者不生效的问题

在 MySQL 8 中,数据目录初始化之后,不再允许更改 lower_case_table_names = 1 的 值;

MySQL 基于一些考量,禁止在重新启动 MySQL 服务时将 lower_case_table_names 设置 成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值。

解决办法:

清除数据目录: 为了能够初始化 MySQL,数据目录必须为空。 您可以选择对数据目录 使用非默认位置;也可以删除 /var/lib/mysql 目录。 如果要保留旧的数据目录,请 先进行备份!

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论