列名和表名在MySQL中区分大小写吗?


72

如果我有一个称为category_id和的列名Category_Id,它们是否不同?

如果我有一个叫category和的表Category,它们是否不同?

Answers:


86

在Unix上,表名区分大小写。在Windows上则不是。好玩,不是吗?Kinda喜欢他们各自的文件系统。你觉得这是巧合吗?

换句话说,如果您打算在Linux机器上进行部署,那么也可以针对基于Linux的MySQL更好地测试SQL,或者在生产时为神秘的“找不到表”错误做好准备。这些天虚拟机很便宜。

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

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


1
来自MySQL文档:尽管数据库和表名在某些平台上不区分大小写,但您不应在同一语句中使用不同的大小写来引用给定的数据库或表。以下语句将不起作用,因为它同时将表引用为my_table和MY_TABLE:,SELECT * FROM my_table WHERE MY_TABLE.col=1;这非常正确,但是无论如何都应区分大小写...
David M 2010年

15
每个表(无论使用什么引擎)都有一个对应的.frm文件,用于存储数据结构。由于表和文件的名称相同,因此表的区分大小写完全取决于服务器上文件系统的区分大小写。
Cucu 2012年

@DavidM,查询对我有用。您正在使用哪个文件系统?
Pacerier,2015年

我认为这个答案可能会使读者感到困惑!表列不区分大小写,这意味着Size并且size是同一列。INSERT INTO table_name (SIZE, gender) VALUES (123, 456);将成功地将值插入列sizeGeNdEr
Sliq

这正是我在倒数第二段中所说的。“字段”和“列”是同一件事。
塞瓦·阿列克谢耶夫

24

从MySQL文档

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

在任何平台上,列名和索引名都不区分大小写,列别名也不区分大小写。



3

你可能会发现 这个必要读。可以在MySQL中设置区分大小写,但这实际上仅是在多个环境中工作时的问题。


是的,我在Linux上使用了lower_case_table_names = 1。它有效,但仅适用于应用此设置后创建的表。
罗兰·鲍曼

1
简而言之:lower_case_table_names=1[mysqld]中添加一行my.cnf
Shautieh

1

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

我们只是试图更改SELECT语句的结果,但是Workbench不允许我们这样做,抱怨我们的查询不包含表的主键(它包含小写字母,但是用小写字母表示),因此结果是只读的。在适当的情况下使用主键(ID而不是ID)运行相同的查询将使我们按预期编辑结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.