剑指MySQL:架构、调优与运维
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7 SQL语句中的字母大小写规范

1.7.1 Windows和Linux平台下字母大小写规范的区别

在SQL语句中,关键字和函数名是不用区分字母大小写的,如SELECT、WHERE、ORDER、GROUP BY等关键字,以及ABS、MOD、ROUND、MAX等函数名。

不过,在SQL语句中,最好确定字母大小写规范,因为在Windows和Linux平台下可能会遇到不同的字母大小写问题。Windows平台默认对字母大小写不敏感,而Linux平台对字母大小写敏感。对字母大小写是否敏感由参数lower_case_table_names决定。该参数有3个值,分别是0、1、2。

(1)0表示创建数据库和表时,根据创建语句中的字母大小写格式将数据库名和表名存放到文件系统中,在查询语句中也是区分字母大小写的。

(2)1表示数据库名和表名在文件系统中是小写的,但在查询语句中是不区分字母大小写的。

(3)2表示创建数据库和表时,根据创建语句中的字母大小写格式将数据库名和表名存放到文件系统中,但在查询语句中都转换为小写格式。

在Windows平台下查看参数lower_case_table_names的默认值,结果如下所示,可以看到参数值为1。

在Linux平台下查看参数lower_case_table_names的默认值,结果如下所示,可以看到参数值为0。

在Linux平台下,SQL语句中的字母大小写规范如下。

(1)数据库名、表名、表的别名、变量名是严格区分字母大小写的。

(2)关键字、函数名不区分字母大小写。

(3)列名(或字段名)与列的别名(或字段的别名)在所有情况下均不区分字母大小写。

1.7.2 Linux平台下字母大小写规范设置

要想在Linux平台下设置对字母大小写不敏感,需要先在my.cnf配置文件的[mysqld]组中加入“lower_case_table_names=1”,然后重启MySQL服务。但是,在重启数据库实例前,需要将原来的数据库名和表名转换为小写格式,否则将报“找不到数据库”的错误。

MySQL 8.0禁止在MySQL服务启动状态下修改参数lower_case_table_names的默认值。我们可以通过如下步骤在MySQL 8.0中设置对字母大小写不敏感。需要注意的是,在设置数据库参数前,需要了解设置这个参数可能带来的影响,切不可盲目设置。

(1)停止MySQL服务。

(2)删除数据目录,即删除/var/lib/mysql/目录。

(3)在MySQL配置文件(/etc/my.cnf)中加入“lower_case_table_names=1”。

(4)重启MySQL服务。

如果命名规范没有统一,就可能产生错误。下面给出两个有关命名规范的建议。

(1)关键字和函数名全部大写。

(2)数据库名、表名、字段名全部小写。