网站首页 > 技术文章 正文
昨天,一位朋友的数据库重启异常。
在错误日志中,有如下内容:
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
猜你喜欢
- 2025-09-13 每次写SQL时总忘记语法顺序怎么办,这里一招教你解决
- 2025-09-13 Spring Boot 2.x中集成H2 内存数据库使用入门
- 2025-09-13 MySQL常用数据类型_mysql数据类型和用途
- 2025-09-13 Mybatis中SQL全大写或全小写影响执行性能吗
- 2025-09-13 MySQL 8.0——创建并使用数据库、获得数据库和表的信息
- 2025-09-13 mysql8.0配置文件优化_mysql配置文件参数优化
- 2025-09-13 清华学长熬夜20天整理出的“数据库MySQL”基础篇「小白必看!」
- 2025-09-13 Windows 中安装 MariaDB 数据库_如何安装mariadb
- 2025-09-13 邮箱区分大小写吗?一文探讨RFC规范
- 2025-09-13 MySQL日常问题之一:DBeaver看到控制台创建的中文注释为乱码
- 最近发表
- 
- 聊一下 gRPC 的 C++ 异步编程_grpc 异步流模式
- [原创首发]安全日志管理中心实战(3)——开源NIDS之suricata部署
- 超详细手把手搭建在ubuntu系统的FFmpeg环境
- Nginx运维之路(Docker多段构建新版本并增加第三方模
- 92.1K小星星,一款开源免费的远程桌面,让你告别付费远程控制!
- Go 人脸识别教程_piwigo人脸识别
- 安卓手机安装Termux——搭建移动服务器
- ubuntu 安装开发环境(c/c++ 15)_ubuntu安装c++编译器
- Rust开发环境搭建指南:从安装到镜像配置的零坑实践
- Windows系统安装VirtualBox构造本地Linux开发环境
 
- 标签列表
- 
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (77)
- vector线程安全吗 (73)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)
 
