资讯专栏INFORMATION COLUMN

MySQL区分大小写参数配置

社区管理员 / 1024人阅读

一、背景简述

在云环境中,我们经常会遇到以下几个场景:

1、MySQL5.7及以下修改区分大小写参数,导致大写表无法识别,影响业务对表/库的操作,间接导致备份失败;

2、MySQL8.0修改区分大小写参数,导致MySQL服务器无法启动。

lower_case_table_names 值
◆ 0  表名存储为给定的大小;比较是区分大小写的
◆ 1  表名存储在磁盘是小写的;比较的时候是不区分大小写
◆ 2  表名存储为给定的大小写;比较的时候是小写的
注:Unix、Linux下lower_case_table_names默认值为0;Windows下默认值是1;Mac OS X下默认是2

二、MySQL区分大小写配置

2.1 MySQL5.7及以下版本

(1)异常分析

让我们先来回答背景中的第一个问题,假设MySQL默认是区分大小写的,即小写的表a与大写的表A是完全不同的两个表。那么为了区分表a与表A,两张表的元数据信息肯定是不同的!!!换句话来说,如果表a与表A的元数据完全相同,那么MySQL靠什么去识别或者区分a与A呢?所以当你去直接修改lower_case_table_names参数的时候,不会报错a表与A表冲突。

进一步思考,不难发现,既然表a与表A的识别元数据不同,如果我们把区分大小写改成不区分大小写,会出现什么问题呢?没错,表a可以被MySQL识别,当MySQL读取表A的时候,会报错表不存在!!!

(2)解决方案

先补充一个知识点:MySQL区分大小写lower_case_table_names参数是一个静态参数,即必须修改配置文件,重启才能生效。那么为了保证我的业务库从区分大小写修改成不区分大小写 后,业务能够稳定运行,需要该怎么做呢?我想你肯定想到了,既然在区分大小写的模式下,a表与A表元数据识别是不同的,那么我把她修改成不区分大小写模式下,MySQL能够识别的不就行了?答案是:对的。

所以,如果你想将区分大小写修改成不区分大小写,必须先将所有大写表或库名全部修改成小写,然后再更改lower_case_table_names参数,即可完美解决问题!!!当然上述案例中的,需要将大A修改成小a之外的任何不重复的字符串即可,因为小a已经存在了。

[mysqld]
lower_case_table_names=1

2.2 MySQL8.0版本

(1)MySQL8.0修改lower_case_table_names

云业务环境中,我们经常会遇到用户直接按照MySQL5.7及以下的方法修改已经完成初始化的MySQL8.0的lower_case_table_names参数,最终导致云数据库启动失败!!!下面就让我们一起来谈讨分析一下~

(2)异常分析

通过对官网文档的翻阅,不难发现MySQL8.0安装初始化之后是不支持更改lower_case_table_names参数的,官网介绍是:In MySQL 8.0, the lower_case_table_names variable can only be configured when the MySQL server is initialized.

官网参考链接:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html

image.png

(3)解决方案

解决方案:在初始化的时候就要配置好lower_case_table_names这个变量的值!!!这样初始化完成后,lower_case_table_names值就是你定义的默认值!!!

[mysqld]
lower_case_table_names=1

注:如上述初始化之前,固化配置文件lower_case_table_names参数值!!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128158.html

相关文章

  • Windows下MySQL无法区分小写解决方案

    摘要:下无法区分大小写解决方案在下数据库名表名列名别名都不区分大小写。如果想大小写区分则在里面的部分加入参数详解其中区分大小写,不区分大小写 MySQL在Linux下数据库名、表名、列名、别名大小写规则: 1、数据库名与表名是严格区分大小写 2、表的别名是严格区分大小写 3、列名与列的别名在所有的情况下均是忽略大小写的 4、变量名也是严格区分大小写的 注意: ...

    oneasp 评论0 收藏0
  • MySQL】lower_case_table_names参数详解

    摘要:简介是设置大小写是否敏感的一个参数。这时更改步骤如下核实实例中是否存在大写的库及表将大写的库名及表名改为小写更改库名可参考更改表名设置重启数据库 简介: lower_case_table_names 是mysql设置大小写是否敏感的一个参数。 1.参数说明: lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的 lower_case_table...

    chenjiang3 评论0 收藏0
  • CI 框架简单入门笔记

    摘要:方法名不区分大小写。当时有面试官还问过,我以为所有的框架都是,真是汗颜的属性有等的超级对象类分段获取从入口文件后,分断获取是按照后面开始的第一个段开始。 1.mvc一般思路 C层: 入口文件-URL获取控制器$_GET[c]和方法$_GET[a]--包含c的文件类(控制器文件)- 实例化c控制器对象-调用方法a(并协调模型和视图),C层不直接调用DB,下面会有提到。 V层: 在C层中i...

    Kross 评论0 收藏0
  • 宜信开源|数据库审核软件Themis的规则解析

    摘要:导语是宜信公司团队开发的一款数据库审核产品,可帮助开发人员快速发现数据库质量问题,提升工作效率。此平台可实现对数据库进行多维度对象结构文本执行计划及执行特征的审核,用以评估对象结构设计质量及运行效率。阀值阀值,代表违反规则的扣分上限。 导语 Themis是宜信公司DBA团队开发的一款数据库审核产品,可帮助DBA、开发人员快速发现数据库质量问题,提升工作效率。 此平台可实现对Oracle...

    andycall 评论0 收藏0
  • 宜信开源|数据库审核软件Themis的规则解析

    摘要:导语是宜信公司团队开发的一款数据库审核产品,可帮助开发人员快速发现数据库质量问题,提升工作效率。此平台可实现对数据库进行多维度对象结构文本执行计划及执行特征的审核,用以评估对象结构设计质量及运行效率。阀值阀值,代表违反规则的扣分上限。 导语 Themis是宜信公司DBA团队开发的一款数据库审核产品,可帮助DBA、开发人员快速发现数据库质量问题,提升工作效率。 此平台可实现对Oracle...

    longmon 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<