关于MySQL5.7 大小写敏感问题的处理记录

MySQL idb 1588℃ 0评论

关于MySQL5.7 大小写敏感问题的处理记录

上周同事反馈说MySQL数据库执行select时,总是提示表不存在的错误,实际上表是存在。经过查询资料,怀疑区分大小写导致,可能和MySQL5.7 的参数lower_case_table_names有关系,该参数默认是0(即区分大小写)。如果该参数是0,那么我们创建表时,表名有大小写,在操作表时,如select ,就会出现”ERROR 1146 (42S02): Table X doesn’t exist”错误,其实这并不一定是表不存在(可以用show tables命令确定),而是可能开启了区分大小写的参数。以下是遇到这种问题的处理过程。记录下来,给自己提个醒。

1、操作系统版本

2、MySQL数据库版本

3、遇到的报错

4、查看表的名称

查看表的名称是否包含大小写,结果发现数据库的很多表的表名都是首字母大写。

操作系统层面查看数据库的表物理文件名称,发现存放在操作系统层面的表文件名也是首字母大写。

5、查看涉及到的主要大小写参数

通过查看lower_case_table_names参数,发现数据库设置为0,说明此时是开启“区分大小写”的。这个参数不是动态参数,所以无法在线修改,需要修改配置文件对应的参数,然后重启数据库。

关于这个参数解释,官方文档URL如下:

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

6、开启忽略大小写参数lower_case_table_names

按照官方文档的建议,进行数据库大小写转换操作,不仅仅是对lower_case_table_names参数进行修改就完事了,还需要对数据库在操作系统层面的相应表的表名进行转换。详细操作如下:

参考:https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html

1)备份原来的mydb数据库,mysqldump就可以

2)关闭数据库,修改参数lower_case_table_names

3)启动数据库,删除旧的mydb数据库,创建新的数据库。 上一步骤的参数修改之后,重启MySQL数据库。

4)执行导入

5)检查MySQL数据库的DATADIR的数据目录mydb(数据库名以实际情况修改)下的相应文件名是否都变为统一小写。

6)连接mysql,测试大小写敏感是否已经正常忽略。

总结

因个人水平限制,以上实践指示针对本次问题的解决方法,但不一定是唯一的方式。仅供参考。线上环境操作,尤其生产环境,还请务必经过严格的风险评估。

转载请注明:猫头鹰工作室 » 关于MySQL5.7 大小写敏感问题的处理记录

喜欢 (0)or分享 (0)
Avatar
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址