MySQL中lower_case_table_names不会改变

MySQL中lower_case_table_names不会改变

在本文中,我们将探讨MySQL数据库在lower_case_table_names参数设定下,表名大小写不敏感的情况。

在MySQL中,lower_case_table_names参数可以设置为0、1或2。当该参数设置为0时,表示表名区分大小写,存储在磁盘中的表名与定义中的表名必须大小写一致,如”myTable”与”mytable”被视为不同的表;当该参数设置为1时,表名将不区分大小写,”myTable”与”mytable”被视为相同的表,但在存储时,MySQL将始终将表名存储为定义中的形式,即”myTable”。当该参数设置为2时,表名不区分大小写,并将表名存储为小写形式,即”mytable”,无论在定义中使用大写还是小写字母。

虽然在lower_case_table_names参数为1时,做查询和更新操作时表名不区分大小写,但是在MySQL中,对于不同大小写的表名,仍然可以使用该表的大小写,例如:

CREATE TABLE myTable (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);

SELECT * FROM myTable; --正确语法

SELECT * FROM mytable; --也可以工作

上述查询语句都可以正确地返回myTable表中的数据。

然而,当lower_case_table_names参数设置为1时,在使用模糊查询时,可能会出现不必要的麻烦。例如,以下查询语句将返回0行:

SELECT * FROM myTable WHERE name LIKE 'my%';

这是因为表名在存储时为”myTable”,而模糊查询时要求表名为”mytable”。因此,在使用lower_case_table_names参数时,使用模糊查询时需要非常小心。

除此之外,lower_case_table_names参数的设置还会影响到通过外键引用表的情况。例如,在设置为1的情况下,以下查询将返回0行:

SELECT * FROM myTable JOIN otherTable ON myTable.id = otherTable.myTableId;

这是因为在otherTable中,外键myTableId必须引用大小写与定义中的myTable完全一致的表,而在查询中使用的表名与定义中的表名不同。当把lower_case_table_names参数设置为0或2时,查询将会正常返回myTable与otherTable的联接结果。

阅读更多:MySQL 教程

总结

MySQL中的lower_case_table_names参数可以影响到表名大小写的区分方式,但在设定后需要注意模糊查询和外键引用的情况。为了避免出现不必要的错误,需要根据具体情况谨慎设置该参数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程