MySQL中的列名和表名是否区分大小写?

82
如果我有两个名为category_idCategory_Id的列,它们是不同的吗?
如果我有一个名为categoryCategory的表,它们也是不同的。
4个回答

96

在Unix上,表名是区分大小写的。而在Windows上则不是。很有趣,对应着它们各自的文件系统。你觉得这是巧合吗?

换句话说,如果你在Windows上开发但计划在Linux机器上部署,最好也要用Linux版的MySQL测试你的SQL语句,否则就要准备在生产环境中遇到神秘的“找不到表”错误了。虚拟机现在很便宜。

字段(列)名称不区分大小写。

编辑:我们讨论的是MySQL 服务器机器上的操作系统,而不是客户端。


1
从MySQL文档中:虽然在某些平台上数据库和表名不区分大小写,但是您不应该在同一语句中使用不同的大小写引用给定的数据库或表。以下语句将无法工作,因为它既将表称为my_table,又将其称为MY_TABLE:“SELECT * FROM my_table WHERE MY_TABLE.col=1;”,因此无论如何都应视为区分大小写... - David M
17
每个表格(无论使用什么引擎)都有一个对应的.frm文件,用于存储数据结构。由于表格和文件名相同,所以表格的大小写敏感性完全取决于服务器文件系统的大小写敏感性。 - Andras Nemeth
@DavidM,这个查询对我来说是有效的。你使用的是哪个文件系统? - Pacerier
我认为这个答案可能会让读者感到困惑!表格列不区分大小写,这意味着Sizesize是同一列。INSERT INTO table_name (SIZE, gender) VALUES (123, 456);将成功地插入sizeGeNdEr列的值。 - Sliq
这正是我在倒数第二段所说的。"Field"和"column"是同一回事。 - Seva Alekseyev

31

根据MySQL文档

在Windows系统中,数据库和表名不区分大小写,在大多数Unix操作系统中区分大小写。有一个值得注意的例外是基于Unix的Mac OS X,该系统使用默认的文件系统类型(HFS+),该文件系统类型不区分大小写。

并且

无论在哪个平台上,列和索引名称都不区分大小写,列别名也不区分大小写。


5

1

奇怪的是,在MySQL Workbench中,即使在Windows上也似乎对大小写敏感。

我们刚试图更改SELECT语句的结果,但Workbench不允许我们这样做,抱怨我们的查询没有包括表的主键(实际上包含了,但是小写),因此结果是只读的。使用正确大小写(ID而非id)运行相同的查询将使我们如预期地编辑结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接