MySQL 5.7数据库中设置不区分大小写相关配置、表名大小写批量转换及err 1017报错处理【测试成功】

艺帆风顺 发布于 2025-04-02 15 次阅读


一、问题背景

    在1个业务系统中,存在只认表名大写的情况;在另1个业务系统中,存在只认表名小写的情况。因此,需要重新调整数据的大小写。

二、批量转换SQL

1、批量大写转小写

    SELECT CONCAT('RENAME TABLE ', table_name, ' TO ', LOWER(table_name), ';') AS sql_statementFROM information_schema.tablesWHERE 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)