dbaplus社群 22小时前
MySQL 8.0 的这个参数千万别乱改!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文讨论了MySQL数据库中lower_case_table_names参数的重要性及其在MySQL 8.0及以上版本中的特殊性。该参数控制数据库对象的大小写敏感性,但在MySQL 8.0中,该参数变为“一次性”设置,初始化后禁止修改,否则可能导致数据库崩溃。文章强调了在初始化数据库之前配置该参数的重要性,并建议在Linux环境下将其设置为1,以小写形式存储表名,且比较不区分大小写。

💡lower_case_table_names参数控制数据库对象的大小写敏感性和存储方式,它有三个值:0(区分大小写)、1(不区分大小写,小写存储)、2(区分大小写,小写比较)。

⚠️MySQL 8.0及以上版本中,lower_case_table_names参数是“一次性”设置,初始化后禁止修改。修改会导致数据字典表字段排序规则不一致,进而可能导致数据库崩溃。

📝官方文档明确指出,服务器初始化时使用的lower_case_table_names设置,不能与启动服务器时使用的设置不同。这决定了标识符的排序和比较方式。

✅对于MySQL 8.0及以上版本,建议在初始化数据库之前,就在配置文件中设置lower_case_table_names参数。

💻在Linux环境下,推荐将lower_case_table_names配置为1,以小写形式存储表名,并且比较不区分大小写。

马听 2025-06-18 07:16 广东

你敢改,数据库就敢崩给你看……

昨天,一位朋友的数据库重启异常。


在错误日志中,有如下内容:


Different lower_case_table_names settings for server ('0') and data dictionary ('1')。


询问得知,是其他人改了 lower_case_table_names 这个参数。


lower_case_table_names参数的作用


lower_case_table_names控制着数据库对象的大小写敏感性和存储方式。可以配置成3个值:


0,表名按创建时指定的大小写存储,名称比较区分大小写;

1,表名按小写形式存储,名称比较不区分大小写;

2,表名按创建时指定的大小写存储,但以小写形式进行比较。


但MySQL 8.0开始,这个参数成了"一次性"设定!


这套MySQL的版本是 8.0.40。


MySQL 8.0 开始,是不让初始化之后修改 lower_case_table_names 的。


官方文档也有详细介绍:


https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names


取出关键的两段翻译一下:


It is prohibited to start the server with a lower_case_table_names setting that is different from the setting used when the server was initialized.  The restriction is necessary because collations used by various data dictionary table fields are determined by the setting defined when the server is initialized, and restarting the server with a different setting would introduce inconsistencies with respect to how identifiers are ordered and compared.


禁止使用与服务器初始化时使用的设置不同的lower_case_table_names设置启动服务器。这个限制是必要的,因为各种数据字典表字段使用的排序规则是由服务器初始化时定义的设置决定的,使用不同的设置重新启动服务器会导致标识符排序和比较方式的不一致。


It is therefore necessary to configure lower_case_table_names to the desired setting before initializing the server.  In most cases, this requires configuring lower_case_table_names in a MySQL option file before starting the MySQL server for the first time.  


因此,有必要在初始化服务器之前将lower_case_table_names配置为所需的设置。在大多数情况下,这需要在第一次启动MySQL服务器之前在MySQL选项文件中配置lower_case_table_names。


一句话总结:8.0你敢改,MySQL就敢崩给你看。


不过,MySQL 5.7是没有这个限制的,具体可以参考5.7对于这个参数的解释:


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


推荐的配置


所以,基于这个问题,还是建议大家在初始化数据库之前,就写在配置文件里。


Linux环境,建议是配置成1,也就是表名将以小写形式存储在磁盘上,并且比较不区分大小写。



作者丨马听

来源丨公众号:MySQL数据库联盟(ID:gh_fbfc36d26181

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MySQL lower_case_table_names 数据库配置 数据库风险
相关文章