2010-01-05 99 views

回答

59

在Unix上,表名是区分大小写的。在Windows上,他们不是。好玩,不是吗?有点像他们各自的文件系统。你认为这是巧合吗?换句话说,如果你打算在Linux机器上进行部署,最好还是在基于Linux的MySQL上测试你的SQL,或者在产品生产时准备好神秘的“找不到表”的错误。虚拟机现在很便宜。

无论如何,字段名不区分大小写。

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

+1

来自MySQL文档:虽然数据库和表名在某些平台上不区分大小写,但不应该在同一语句中使用不同的情况来引用给定的数据库或表。下面的语句不会工作,因为它引用了一个表my_table和MY_TABLE:'SELECT * FROM my_table WHERE MY_TABLE.col = 1;',所以非常正确,但在任何情况下都应该区分大小写。 – 2010-01-05 20:54:53

+4

它不是基于表类型 – 2010-01-05 20:54:58

+11

每个表(***无论是什么引擎***)都有一个对应的存储数据结构的'.frm'文件。由于表和文件的名称相同,表的大小写敏感性完全取决于服务器上文件系统的区分大小写。 – Cucu 2012-11-05 15:30:46

-5

不,表名和行名不区分大小写,甚至SQL语句都不区分大小写。 因此,例如您给出的名称是相同的
编辑: 这取决于服务器排序规则。所以你必须检查设置。与OS无关。

+0

错误 - Seva Alekseyev说得对。 – 2010-01-05 20:53:41

+0

对不起,我第一次遇到这个。有精神伤痕要证明。 – 2010-01-05 20:59:22

3

您可能会发现需要阅读this。可以在MySQL中设置区分大小写,但在多个环境中工作时,它确实只是一个问题。

+0

是的,我在linux上使用lower_case_table_names = 1。它可以工作,但只适用于您在应用此设置后创建的表格。 – 2010-01-05 21:20:32

+0

简而言之:在'my.cnf'的'[mysqld]'下添加一行'lower_case_table_names = 1'。 – Shautieh 2016-10-28 16:48:18

11

从MySQL的documentation

数据库和表名不区分大小写在Windows中,而且在大多数Unix变种的情况下 敏感。一个明显的例外是Mac OS X,它基于Unix,但使用 不区分大小写的默认文件系统类型(HFS +)。

列和索引名不区分任何平台上的敏感,也不是列别名。

2

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

我们只是试图改变SELECT语句的结果,但Workbench没有让我们抱怨我们的查询没有包含表的主键(它做了,但是在小写),所以结果被读取-只要。在正确的情况下使用主键运行相同的查询(ID而不是id)会让我们按预期编辑结果。