linux mysql 8 大小写敏感问题
问题描述
我在linux上用docker安装了mysql8容器。并部署了几个网站服务。最近,我又部署了一个网站系统(.net)上去,运行起来后MySqlConnector报了一个错:
Table 'xxx.Sys_User' doesn't exist
。事实上该网站系统能在windows上正常运行。
原因分析
在Linux系统中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。默认情况下,你在Linux上安装的Mysql是大小写敏感的,而在Windows版的Mysql默认大小写不敏感。这个是一个很常见的问题,大多数人都会遇到。通过在mysql中输入一下命令可以验证这一点:SHOW VARIABLES LIKE 'lower_case_%';
打印信息如下:
解决方案
解决方案有两个:
1、修改Linux版mysql默认配置,需要重装mysql。
重装Linux版本mysql,然后在首次打开mysql之前修改mysql配置文件,将上面两个值设置成和windows一样。注意,此方案需要你先备份好所有数据库。
具体操作网上参考文章很多:如:linux系统中mysql8.0版本修改大小写不敏感(配置表名不区分大小写)
2、直接改表名
由于上面说的Linux和win仅仅是对数据库名和表名存在大小写敏感上差异,而对表的字段名不存在大小写敏感的问题。如果你的mysql已经在Linux上运行一段时间,已经装了几个数据库,备份数据库很麻烦,并且你的数据表不多(30张以内)的话,比较推荐的做法是,直接修改你出错的数据库的所有表名。
比如:我的数据库里有一张表Sys_User。由于win mysql 不区分大小写,因此 mysql 里存储的表名是小写的:【sys_user】 。我们直接把它改成【Sys_User】即可。
参考文章:填坑 | .NET core项目远程部署后连接数据库 mysql表大小写敏感问题
贴一下修改前后的效果图:
修改前:
修改后:
最后,引申出一个数据库命名规范问题
由此,我们可以得出,一个好的数据库命名规范是:数据库名、数据表名、表字段名全用小写命名,单词之间用下划线(_)连接。
参考链接:mysql - 命名规范/命名规则/sql规范/sql规则