MySQL修改lower_case_table_names参数的方法实践

 更新时间:2024年05月24日 09:13:41   作者:AlfredZhao  
本文主要介绍了MySQL修改lower_case_table_names参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

环境:MySQL 5.7.25

起初创建环境时没有要求表名称不区分大小写,后续应用使用提出要设置lower_case_table_names=1的需求,期望表名不再区分大小写。
修改这个参数需要重启实例,另外一定要注意该参数修改会导致之前大写存储的表将无法识别,需要特殊处理。

1.默认区分大小写的环境

默认在lower_case_table_names=0的情况下,表名是严格区分大小写的,若查询时大小写弄混淆就会直接报错表不存在,现象如下:

root@mysqldb 12:33:  [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| T1             |
| t2             |
+----------------+
2 rows in set (0.00 sec)

root@mysqldb 12:33:  [test]> show variables like '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+
2 rows in set (0.02 sec)

root@mysqldb 12:34:  [test]> select * from T1;
Empty set (0.00 sec)

root@mysqldb 12:34:  [test]> select * from t2;
Empty set (0.00 sec)

root@mysqldb 12:34:  [test]> select * from t1;
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
root@mysqldb 12:34:  [test]> select * from T2;
ERROR 1146 (42S02): Table 'test.T2' doesn't exist
root@mysqldb 12:34:  [test]> 

2.修改参数lower_case_table_names

在my.cnf配置文件中[mysqld]标签的作用区域,增加`lower_case_table_names=1`的配置,然后重启MySQL服务:

service mysqld restart

3.验证表名区分大小写情况

重启实例后,确认参数已修改:

root@mysqldb 12:58:  [test]> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 1     |
+------------------------+-------+
1 row in set (0.00 sec)

发现原表t2,在参数修改后,通过t2和T2都可以访问,满足需求。
但是原表T1,在参数修改后,通过t1和T1都无法访问,细看报错可以看到无论我们传入T1还是t1,都是按照小写的t1来解析。

root@mysqldb 12:46:  [(none)]> use test
Database changed
root@mysqldb 12:46:  [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| T1             |
| t2             |
+----------------+
2 rows in set (0.01 sec)

root@mysqldb 12:46:  [test]> select * from t1;
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
root@mysqldb 12:47:  [test]> select * from T2;
Empty set (0.01 sec)

root@mysqldb 12:47:  [test]> select * from T1;
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
root@mysqldb 12:47:  [test]> select * from t2;
Empty set (0.00 sec)

如果此时应用再重新创建T1表,就会被存储为小写的t1:

root@mysqldb 13:03:  [test]> create table T1(id int);
Query OK, 0 rows affected (0.08 sec)

root@mysqldb 13:03:  [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| T1             |
| t1             |
| t2             |
+----------------+
3 rows in set (0.00 sec)

root@mysqldb 13:03:  [test]> select * from T1;
Empty set (0.00 sec)

root@mysqldb 13:03:  [test]> select * from t1;
Empty set (0.00 sec)

至于之前的T1,如果想要清理删除,可改回lower_case_table_names=0后进行删除。

总结:如果有不区分大小写这样的需求,在建库配置时就要及早提出,不然后期更改不但要停机,还很可能需要特殊处理。
如果不幸遇到这样的情况,操作之前先使用mysqldump进行导出备份,然后删除所有含有大写的表,成功修改参数后再进行导入即可。

到此这篇关于MySQL修改lower_case_table_names参数的文章就介绍到这了,更多相关MySQL lower_case_table_names修改参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySql日期查询语句详解

    MySql日期查询语句详解

    在mysql中对时间日期操作的函数有很多,有时我们就希望直接通过sql查询出指定日期的数据
    2013-11-11
  • MySQL基本运维命令详解

    MySQL基本运维命令详解

    这篇文章主要介绍了MySQL基本运维命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • MySQL基础教程之DML语句详解

    MySQL基础教程之DML语句详解

    DML 语句是指对数据库中表的记录进行的操作,下面这篇文章主要给大家介绍了关于MySQL基础教程之DML语句的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • MySQL必备的常见知识点汇总整理

    MySQL必备的常见知识点汇总整理

    这篇文章主要介绍了MySQL必备的常见知识点,结合实例形式汇总整理了mysql各种常见知识点,包括登录、退出、创建、增删改查、事务等知识点与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • mysql中如何查询数据库中的表名

    mysql中如何查询数据库中的表名

    这篇文章主要介绍了mysql中如何查询数据库中的表名问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • MySQL 5.7 zip版本(zip版)安装配置步骤详解

    MySQL 5.7 zip版本(zip版)安装配置步骤详解

    这篇文章主要介绍了MySQL 5.7 zip版本(zip版)安装配置步骤详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • MySQL查询性能优化方法汇总讲解

    MySQL查询性能优化方法汇总讲解

    这篇文章主要介绍了MySQL查询性能优化方法,Mysql查询性能优化要从三个方面考虑,库表结构优化、索引优化和查询优化,通常在实际应用中,我们要面对这三种搅和一起的情况,需要了解MySQL查询性能优化方法的朋友可以参考下
    2024-05-05
  • MySQL外键约束(Foreign Key)案例详解

    MySQL外键约束(Foreign Key)案例详解

    MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用,下面这篇文章主要给给大家介绍了关于MySQL外键约束(Foreign Key)的相关资料,需要的朋友可以参考下
    2022-06-06
  • 分享MySql8.0.19 安装采坑记录

    分享MySql8.0.19 安装采坑记录

    这篇文章主要介绍了MySql8.0.19 安装采坑记录,内容虽然不长,但是都是朋友经常遇到的问题,小编特此分享到脚本之家平台,需要的朋友可以参考下
    2020-02-02
  • MySQL 中 datetime 和 timestamp 的区别与选择

    MySQL 中 datetime 和 timestamp 的区别与选择

    MySQL 中常用的两种时间储存类型分别是datetime和 timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择,需要的朋友可以参考一下
    2021-09-09

最新评论