问题描述
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
目录。 如果要保留旧的数据目录,请 先进行备份!
文章评论