在MySQL中,设置数据库忽略大小写是通过配置lower_case_table_names参数来实现的。这个参数决定了表名和数据库名在存储和比较时是否区分大小写。需要注意的是,这个参数在安装MySQL时设置最为稳妥,如果之后更改可能会需要重新初始化数据库。

以下是配置步骤和注意事项:

  1. 理解lower_case_table_names参数

    • 设置为0:表名和数据库名区分大小写。这是Unix、Linux系统的默认设置。

    • 设置为1:表名和数据库名不区分大小写,在存储和比较时都会转换为小写。

    • 设置为2:表名和数据库名区分大小写,但在比较时会转换为小写(即不区分大小写比较,但存储时保留原大小写)。这个设置主要用于不区分大小写的文件系统。

  2. 检查当前设置
    在修改之前,可以先检查当前的设置:

    sql

    SHOW VARIABLES LIKE 'lower_case_table_names';
  3. 修改配置文件

    • 找到MySQL的配置文件my.cnf(Linux)或my.ini(Windows)。

    • [mysqld]部分添加或修改lower_case_table_names参数。

    • 例如,要设置为不区分大小写,添加:

      text

      [mysqld]
      lower_case_table_names=1
  4. 重要注意事项

    • 在修改这个参数之前,必须确保MySQL服务是停止状态。

    • 如果之前已经存在表,修改此参数后可能会导致表名的大小写问题,因此最好在初始化数据库之前设置好。

    • 在Windows系统上,默认值为1(不区分大小写),在Unix-like系统上,默认值为0(区分大小写)。如果要在Unix-like系统上设置为不区分大小写,需要谨慎操作,因为可能会影响现有数据库。

  5. 重启MySQL服务
    修改配置文件后,需要重启MySQL服务使配置生效。

  6. 潜在问题

    • 如果之前数据库是区分大小写的,改为不区分大小写后,可能会出现重复表名的问题(例如,原来有Table1table1两个表,在改为不区分大小写后,这两个表名会被视为相同)。

    • 因此,如果数据库已经存在数据,修改此参数前需要备份数据,并谨慎操作。

基于以上约束条件,下面为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');

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐