mysql踩坑(一)-大小写规则

mysql大小写

在实际的项目中,大家或多或少都会遇到过mysql数据库大小写的问题。下面,博主将简单的介绍一下mysql数据库的大小写问题。

sql关键字和函数名

在mysql数据库中,sql关键字和大小写 是不区分大小写的。下面语句的俩种写法,mysql都能够正常的执行。

/*全小写*/
select now();

/*全大写*/
SELECT NOW():

数据库名和表名

博主在一次数据库的迁移时,就碰到了数据库表名大小写的问题。在windows服务器上运行好好的应用,在mysql数据库迁移到linux服务器上后,就出现了表不存在的异常。后面经过排查得知,mysql数据库名和表名与操作系统是否区分大小写有关系

windows系统

在windows系统下,mysql数据库不区分大小写。也就是说你的select语句中的表名是全大写的,而实际数据库的表名是全小写的,也能够查询到数据。

查询大写的名称ROLE表,能够查询到表数据。

Windows查询role表

查询小写的名称ROLE表,能够查询到表数据。

Windows查询ROLE表

linux系统

在linux系统下,mysql数据库区分大小写。如下图所示,查询大写的名称ROLE表,datagrip返回了 表不存在的错误提示。

Linux查询ROLE表

而使用全小写的名称role,则能够查询到表数据。

Linux查询role表

博主这里使用是docker运行的mysql镜像,配置文件的路径为/etc/mysql/mysql.conf.d/mysqld.cnf,添加如下所示的配置,使的mysql不区分大小写。

low_case_table_names=1

配置完后,重启mysql服务,这时候再次查看执行结果。

查看执行结果

列名和索引名

在mysql数据库中,不区分列名和索引名的大小写。如下图所示,使用大写和小写的id字段都能够查询到数据。

不区分列名查询

如下图所示,使用大写和小写的索引名称都能够正常的查询数据。

enter description here

博主微信公众号

原文地址:https://www.cnblogs.com/chenhaoblog/p/13604727.html