前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL区分大小写参数配置

MySQL区分大小写参数配置

原创
作者头像
Power
发布2025-02-28 21:40:29
发布2025-02-28 21:40:29
41800
代码可运行
举报
运行总次数:0
代码可运行

一、背景简述

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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已经存在了。

代码语言:javascript
代码运行次数:0
运行
复制
[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

MySQL区分大小写参数配置(图1)
MySQL区分大小写参数配置(图1)

(3)解决方案

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

代码语言:javascript
代码运行次数:0
运行
复制
[mysqld]
lower_case_table_names=1

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景简述
  • 二、MySQL区分大小写配置
    • 2.1 MySQL5.7及以下版本
    • 2.2 MySQL8.0版本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档