2010-01-05 97 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)會讓我們按預期編輯結果。