一、问题背景
在1个业务系统中,存在只认表名大写的情况;在另1个业务系统中,存在只认表名小写的情况。因此,需要重新调整数据的大小写。
二、批量转换SQL
1、批量大写转小写
SELECT CONCAT('RENAME TABLE ', table_name, ' TO ', LOWER(table_name), ';') AS sql_statement
FROM information_schema.tables
WHERE table_schema = '要转换的库名';
2、批量小写转大写
SELECT
concat("alter table ", TABLE_NAME , ' rename to ' , upper(TABLE_NAME) ,' ;' )
FROM information_schema.TABLES t
WHERE TABLE_SCHEMA = '要转换的库名';
三、处理报错
1017 - Can't find file: './vehicle_s1/act_evt_log.frm'
(errno: 2 - No such file or directory)
查看数据库源路径文件,发现都是大写。
/usr/local/docker_data/mysql/data/vehicle_s1
此时,先修改my.cnf配置文件lower_case_table_names = 0;
执行批量修改SQL之后,再修改配置文件:
lower_case_table_names = 1
即可成功解决。
验证:show variables like '%case%';
mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
2 rows in set (0.00 sec)