linux中mysql区分大小写

前言

最近项目中遇到一个问题,有点工作流的模块,它有自己的表,启动后会检查数据库中是否有它自己的表,没有的话会自动创建,启动该模块后,发现创建了一堆全部大写命名的表,而且小写命名的表是存在的,第一时间想到的区分大小写问题,因为之前用的windows上的mysql没问题,这次用的是centos上mysql,所以linux上装的mysql默认是区分大小写的

修改

首先登录mysql,控制台或者navicat都可以,执行下面命令查看当前是否区分大小写

1
show variables like '%case%';

lower_case_table_name值:0:区分大小 1:不区分大小写,它是只读变量,mysql启动之后无法直接更改,只能去my.conf中修改,首先找到mysq.ini,找到**[mysqld]**部分添加配置,不要写错位置,否则轻则修改无效,重则mysql无法启动。

my.cnf一般在/etc/mysql/my.cnf中,修改后如下

1
2
3
4
5
6
#Ubuntu下配置文件是/etc/mysql/mysql.conf.d/mysqld.cnf
#CentOS下配置文件是/etc/my.cnf
#在[mysqld]下添加配置

[mysqld]
lower_case_table_names=1

改完后重启mysql

1
2
3
4
5
6
7
8
#ubuntu
systemctl restart mysql.service

#centos
systemctl restart mysqld

#docker
docker restart mysql
总结
  • 在linux中数据库名与表名默认是严格区分大小写的;
  • 在linux中表的别名是严格区分大小写的;
  • 在linux中列名与列的别名在所有的情况下均是忽略大小写的;
  • 在linux中变量名也是严格区分大小写的;
  • 在Windows下都不区分大小写。
注意:

经过测试,docker命令直接创建的话需要在命令中最后添加该参数配置,否则一经启动,无法更改,创建并运行命令如下

1
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123445 mysql:latest --lower-case-table-names=1