环境: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. C#开源跨平台的多功能Steam工具箱&GitHub加速神器

    前言 作为一个程序员你是否会经常会遇到GitHub无法访问(如下无法访问图片),或者是访问和下载源码时十分缓慢就像乌龟爬行一般.今天分享一款C#开源的.跨平台的多功能Steam工具箱和GitHub加速 ...

  2. echarts自定义legend样式

    https://blog.csdn.net/changyana/article/details/126281275

  3. git速查

  4. C#格式化输入数据为货币格式

    private void btn_Get_Click(object sender, EventArgs e) { double P_dbl_value;//定义double类型变量 if (doubl ...

  5. HP笔记本(Inspiron 7472) 视频时无摄像头的处理方案

    需要视频考试的前一天,测试摄像头时发现微信视频时竟然摄像头打不开.比较焦急,尝试了好几种办法,并在2小时内找出解决方案.   一.查看设备是否被禁用 我的电脑->右键->设备管理器-> ...

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

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

  7. 基于python+django的酒店预定网站-酒店管理系统

    该系统是基于python+django开发的酒店预定管理系统.适用场景:大学生.课程作业.毕业设计.学习过程中,如遇问题可在github给作者留言. 演示地址 前台地址: http://hotel.g ...

  8. 【收集】embed

    序 链接 备注 1 适用于嵌入式单片机的差分升级通用库+详细教程_风吹花中花吹风的博客-CSDN博客 差分升级包制作与还原 2 前言 · 给新手的两轮自平衡小车开发实战指南 (miaowlabs.co ...

  9. SSM整合 - 环境配置

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  10. 左值,右值,引用,指针,常量,auto如何组合?

    左值,右值,引用,指针,常量,auto如何组合? 左值引用:int &a = b; 左值引用是通过使用&符号来声明的,例如int &a. 左值引用用于绑定到左值(可标识的.持久 ...