我正在玩MySQL(好奇心,自学),我注意到一件奇怪的事情:
我想创建一个表:
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
。为什么?在创建表格之前我应该知道什么吗?
答案 0 :(得分:2)
检查 lower_case_table_names 系统变量的值。如果此变量的值为1,则MySQL会将所有表名转换为小写以进行存储。有关此行为的更多信息,请访问:MySQL Identifier Case Sensitivity
MySQL实际上建议将此行为作为避免数据传输问题的方法(来自上面链接的文档):
避免因数据库或数字信箱引起的数据传输问题 表名,你有两个选择:
在所有系统上使用lower_case_table_names = 1。主要缺点 这就是当你使用SHOW TABLES或SHOW DATABASES时,你可以这样做 没有看到原始字母的名字。
在Unix上使用lower_case_table_names = 0,在lower_case_table_names = 2上使用 视窗。这样可以保留数据库和表名的字母大小写。 这样做的缺点是你必须确保你的陈述 总是用正确的方式引用你的数据库和表名 Windows上的字母。如果您将语句转移到Unix,那么 lettercase很重要,如果是lettercase,它们不起作用 不正确。
答案 1 :(得分:1)
SQL一般不区分大小写(关键字和名称),因此大/小的情况无关紧要。由于mysql将表映射到文件(至少是MyISAM表),因此使用Linux或Windows系统会产生差异。在这种情况下,Imho你不应该创建名字。