在实际的项目中,大家或多或少都会遇到过mysql数据库大小写的问题。下面,博主将简单的介绍一下mysql数据库的大小写问题。
在mysql数据库中,sql关键字和大小写 是不区分大小写的。下面语句的俩种写法,mysql都能够正常的执行。
/*全小写*/ select now(); /*全大写*/ SELECT NOW():博主在一次数据库的迁移时,就碰到了数据库表名大小写的问题。在windows服务器上运行好好的应用,在mysql数据库迁移到linux服务器上后,就出现了表不存在的异常。后面经过排查得知,mysql数据库名和表名与操作系统是否区分大小写有关系
在windows系统下,mysql数据库不区分大小写。也就是说你的select语句中的表名是全大写的,而实际数据库的表名是全小写的,也能够查询到数据。
查询大写的名称ROLE表,能够查询到表数据。
查询小写的名称ROLE表,能够查询到表数据。
在linux系统下,mysql数据库区分大小写。如下图所示,查询大写的名称ROLE表,datagrip返回了 表不存在的错误提示。
而使用全小写的名称role,则能够查询到表数据。
博主这里使用是docker运行的mysql镜像,配置文件的路径为/etc/mysql/mysql.conf.d/mysqld.cnf,添加如下所示的配置,使的mysql不区分大小写。
low_case_table_names=1配置完后,重启mysql服务,这时候再次查看执行结果。
在mysql数据库中,不区分列名和索引名的大小写。如下图所示,使用大写和小写的id字段都能够查询到数据。
如下图所示,使用大写和小写的索引名称都能够正常的查询数据。
在utf8字符集中,字符集排序规则utf8_bin,在排序和比较字符串的时候使用的是二进制,因此区分大小写,而utf8_general_ci不区分大小写。