2012-01-07 33 views
1

我与MySQL(好奇心,自学习)玩,我注意到一个奇怪的事情:MySQL的CREATE TABLE脚本和表名

我想创建一个表:

use `a`; 

CREATE TABLE `Languages` (
    `Id` int(11) NOT NULL AUTO_INCREMENT, 
    `LanguageName` char(10) NOT NULL DEFAULT '', 
    PRIMARY KEY (`Id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

但作为结果,表名是languages而不是Languages。为什么?在创建表之前我应该​​知道什么吗?

+1

是的,你应该:在MySQL中,表名通常不区分大小写 – 2012-01-07 16:27:28

回答

1

SQL在一般情况下(关键字和名称)不区分大小写,因此上/下情况应该没有关系。由于mysql将表映射到文件(至少MyISAM表),因此您使用Linux或Windows系统会有所不同。 Imho你不应该创造名字,在案件很重要。

2

检查您的lower_case_table_names系统变量的值。如果此变量的值为1,则MySQL将所有表名称转换为小写以存储。此行为的详细信息可以在这里找到:MySQL Identifier Case Sensitivity

MySQL的实际建议这种行为,以此来避免数据传输的问题(从上面链接的文档):

为了避免大小写引起的数据传输问题的数据库或 表名,您有两种选择:

在所有系统上使用lower_case_table_names = 1。这样做的主要缺点 是,当你使用SHOW TABLES或SHOW DATABASES时,你做 看不到他们原来的lettercase中的名字。

在Unix上使用lower_case_table_names = 0,在 Windows上使用lower_case_table_names = 2。这保留了数据库和表名的字母大小写。 这样做的缺点是,您必须确保您的陈述 始终在Windows上使用正确的 lettercase引用数据库和表名。如果您将语句转移到Unix,其中 lettercase很重要,但如果lettercase不正确,则它们不起作用。