MySQL查询区分大小写?这个参数改错数据库会崩溃
昨天,一位朋友的数据库重启异常。
在错误日志中,有如下内容:
es for ('0') and data ('1')。
询问得知,是其他人改了 es 这个参数。
es参数的作用
es控制着数据库对象的大小写敏感性和存储方式。可以配置成3个值:
0,表名按创建时指定的大小写存储,名称比较区分大小写;
1,表名按小写形式存储,名称比较不区分大小写;
2,表名按创建时指定的大小写存储,但以小写形式进行比较。
但MySQL 8.0开始,这个参数成了"一次性"设定!
这套MySQL的版本是 8.0.40。
MySQL 8.0 开始,是不让初始化之后修改 es 的。
官方文档也有详细介绍:

取出关键的两段翻译一下:
It is to start the with a es that is from the used when the was . The is used by data table are by the when the is , and the with a would with to how are and .
禁止使用与服务器初始化时使用的设置不同的es设置启动服务器。这个限制是必要的,因为各种数据字典表字段使用的排序规则是由服务器初始化时定义的设置决定的,使用不同的设置重新启动服务器会导致标识符排序和比较方式的不一致。
It is to es to the the . In most cases, this es in a MySQL file the MySQL for the first time.
因此,有必要在初始化服务器之前将es配置为所需的设置。在大多数情况下,这需要在第一次启动MySQL服务器之前在MySQL选项文件中配置es。
一句话总结:8.0你敢改,MySQL就敢崩给你看。
不过,MySQL 5.7是没有这个限制的,具体可以参考5.7对于这个参数的解释:
推荐的配置
所以,基于这个问题,还是建议大家在初始化数据库之前,就写在配置文件里。
Linux环境,建议是配置成1,也就是表名将以小写形式存储在磁盘上,并且比较不区分大小写。
作者丨马听























