mysql8 数据库开启忽略大小写
在Windows系统上,默认值为1(不区分大小写),在Unix-like系统上,默认值为0(区分大小写)。如果要在Unix-like系统上设置为不区分大小写,需要谨慎操作,因为可能会影响现有数据库。设置为2:表名和数据库名区分大小写,但在比较时会转换为小写(即不区分大小写比较,但存储时保留原大小写)。如果之前已经存在表,修改此参数后可能会导致表名的大小写问题,因此最好在初始化数据库之前设置好。如果
在MySQL中,设置数据库忽略大小写是通过配置lower_case_table_names参数来实现的。这个参数决定了表名和数据库名在存储和比较时是否区分大小写。需要注意的是,这个参数在安装MySQL时设置最为稳妥,如果之后更改可能会需要重新初始化数据库。
以下是配置步骤和注意事项:
-
理解
lower_case_table_names参数:-
设置为0:表名和数据库名区分大小写。这是Unix、Linux系统的默认设置。
-
设置为1:表名和数据库名不区分大小写,在存储和比较时都会转换为小写。
-
设置为2:表名和数据库名区分大小写,但在比较时会转换为小写(即不区分大小写比较,但存储时保留原大小写)。这个设置主要用于不区分大小写的文件系统。
-
-
检查当前设置:
在修改之前,可以先检查当前的设置:sql
SHOW VARIABLES LIKE 'lower_case_table_names'; -
修改配置文件:
-
找到MySQL的配置文件
my.cnf(Linux)或my.ini(Windows)。 -
在
[mysqld]部分添加或修改lower_case_table_names参数。 -
例如,要设置为不区分大小写,添加:
text
[mysqld] lower_case_table_names=1
-
-
重要注意事项:
-
在修改这个参数之前,必须确保MySQL服务是停止状态。
-
如果之前已经存在表,修改此参数后可能会导致表名的大小写问题,因此最好在初始化数据库之前设置好。
-
在Windows系统上,默认值为1(不区分大小写),在Unix-like系统上,默认值为0(区分大小写)。如果要在Unix-like系统上设置为不区分大小写,需要谨慎操作,因为可能会影响现有数据库。
-
-
重启MySQL服务:
修改配置文件后,需要重启MySQL服务使配置生效。 -
潜在问题:
-
如果之前数据库是区分大小写的,改为不区分大小写后,可能会出现重复表名的问题(例如,原来有
Table1和table1两个表,在改为不区分大小写后,这两个表名会被视为相同)。 -
因此,如果数据库已经存在数据,修改此参数前需要备份数据,并谨慎操作。
-
基于以上约束条件,下面为mysql8 在使用过程中发现未开启忽略大小写的配置的实践,直接上脚本:
1、使用当前设置导出逻辑备份
使用mysqldump导出所有数据
mysqldump -u root -p --all-databases > /tmp/all-databases.sql
2、重新初始化MySQL并设置为1
# 停止MySQL
sudo systemctl stop mysqld
# 备份当前数据
sudo mv /var/lib/mysql /var/lib/mysql_backup_final
# 重新初始化
sudo mkdir /var/lib/mysql
sudo chown mysql:mysql /var/lib/mysql
sudo mysqld --initialize --user=mysql --lower-case-table-names=1 --datadir=/var/lib/mysql
# 获取临时密码
sudo grep 'temporary password' /var/lib/mysql/error.log
# 启动MySQL
sudo systemctl start mysqld
3、修改密码并恢复备份数据
# 使用临时密码登录并修改root密码
mysql -u root -p
# 在MySQL中执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
# 导入数据
mysql -u root -p < /tmp/all_databases.sql
至此,数据恢复并开启忽略大小写成功。
备注:查询存在大小写表的sql
SELECT TABLE_SCHEMA, TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_NAME != LOWER(TABLE_NAME)
AND TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys');
更多推荐
所有评论(0)