环境: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参数的更多相关文章

  1. 小知识:修改IDEA的模板

    小知识:修改IDEA的模板 有时候我们会发现,IDEA默认创建的模板并不是我们常用的.与其每次都在创建后进行修改,不如直接对模板进行修改. 给不知道怎么修改的同学指一下路: File->sett ...

  2. Mysql8.0修改lower_case_table_names参数导致重启失败

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 事件起因:在测试一个数据迁移工具时,源端oracle ...

  3. mysql修改lower_case_table_names产生的问题

    1.参数含义: lower_case_table_names: 此参数不可以动态修改,必须重启数据库 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区 ...

  4. 语言小知识-MySQL数据库引擎

    MySQL作为全世界广受欢迎的数据库,被用于很多中小型的项目中,但是你对 MySQL 数据库的存储引擎了解多少呢? 我们将逻辑表中的数据存储到数据库中,数据库又将我们表中的数据存储到物理设备中(如磁盘 ...

  5. 小知识:C#可选参数的一个陷阱

    一.背景: 互联网行业,为了降低程序维护.升级的部署风险,往往会将程序拆分成很多项目,编译成多个dll部署,这样发布的时候,只需要部署修改过的dll即可.   二.问题: 有一个函数,在很多个地方被使 ...

  6. 容易忽略的小知识之 Date 函数参数

    Date 对象启用基本存储器并取得日期和时间. dateObj = new Date()dateObj = new Date(dateVal)dateObj = new Date(year, mont ...

  7. Get与Post的小知识

    Get与Post的小知识 一.传递参数: Get把参数包含在URL中,而在Post通过request body传递参数.因为参数直接暴露在URL上,GET比POST更不安全,所以不能用来传递敏感信息. ...

  8. MySQL Cluster基础知识简介以及基本参数介绍

    PS:这些资料都是以前整理的,有些有可能是在网上copy别人的,但是时间长了,记不得出处了,sorry! 在MySQL Cluster环境的配置文件config.ini里面,每一类节点都有两个(或以上 ...

  9. $Django 路飞之小知识回顾,Vue之样式element-ui,Vue绑定图片--mounted页面挂载--路由携带参数

    一 小知识回顾 1 级联删除问题 2 一张表关联多个表,比如有manytomanyfileds forignkey,基于对象查询存在的问题:反向查询的时候  表名小写_set.all()不知是哪个字段 ...

  10. MySQL不常用、易忽略的小知识

    笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL coun ...

随机推荐

  1. vue-echarts之折线图以及双Y轴折线,柱状混合图,部分属性记录

    https://blog.csdn.net/qq_41139348/article/details/106870005 https://segmentfault.com/a/1190000021898 ...

  2. 如何实现 Excel 表格转置(行列互换)

    直接上经验贴: https://baijiahao.baidu.com/s?id=1690475581736550777&wfr=spider&for=pc 大概就是 先复制粘贴,在粘 ...

  3. ABP微服务系列学习-搭建自己的微服务结构(二)

    在解决方案根目录添加common.props,这个文件的作用是可以配置项目文件全局的一些属性,如忽略警告,全局PackageReference,语言版本等. <Project> <P ...

  4. Spring Cloud 系列:Seata 中TCC模式具体实现

    概述 https://seata.io/zh-cn/docs/dev/mode/tcc-mode https://seata.io/zh-cn/docs/user/mode/tcc TCC模式与AT模 ...

  5. 3. Oracle数据库异常关闭,导致错误3. Oracle数据库异常关闭,导致错误ERROR: ORA-01034: ORACLE ngt available; ORA-27101: shared memory realm does not exist

    之前由于电脑没电,强制关机,导致Oracle数据库异常关闭,再次启动电脑登陆数据库时,发生以下错误: 当我尝试重新启动数据库时,发生错误: 经过查阅资料后得知:缺少INITXE.ORA文件,需要从下图 ...

  6. Python Code_01

    author : 写bug的盼盼 development time : 2021/8/27 19:41 输出数字 print(520) 输出字符串 print('HelloWorld') print( ...

  7. [转帖]k8s ipv4/ipv6双栈实践

    https://www.iceyao.com.cn/post/2020-11-28-k8s_dual_stack/ Posted by 爱折腾的工程师 on Saturday, November 28 ...

  8. [转帖]AMD处理器ZEN一代之国产化海光

    https://huataihuang.gitbook.io/cloud-atlas-draft/os/linux/kernel/cpu/amd_hygon   2020年国产化处理器受到了广泛的关注 ...

  9. [转帖]configure 各种配置

    https://api.dandelioncloud.cn/article/details/1487329970564485121 -build=编译该软件所使用的平台 -host=该软件将运行的平台 ...

  10. [转帖]enq: TX - row lock contention故障处理一则

    https://www.cnblogs.com/zhchoutai/p/7088826.html   一个非常easy的问题,之所以让我对这个问题进行总结.一是由于没我想象的简单,在处理的过程中遇到了 ...