2012-01-07 45 views
1

我與MySQL(好奇心,自學習)玩,我注意到一個奇怪的事情:MySQL的CREATE TABLE腳本和表名

我想創建一個表:

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。爲什麼?在創建表之前我應該​​知道什麼嗎?

+1

是的,你應該:在MySQL中,表名通常不區分大小寫 – 2012-01-07 16:27:28

回答

1

SQL在一般情況下(關鍵字和名稱)不區分大小寫,因此上/下情況應該沒有關係。由於mysql將表映射到文件(至少MyISAM表),因此您使用Linux或Windows系統會有所不同。 Imho你不應該創造名字,在案件很重要。

2

檢查您的lower_case_table_names系統變量的值。如果此變量的值爲1,則MySQL將所有表名稱轉換爲小寫以存儲。此行爲的詳細信息可以在這裏找到:MySQL Identifier Case Sensitivity

MySQL的實際建議這種行爲,以此來避免數據傳輸的問題(從上面鏈接的文檔):

爲了避免大小寫引起的數據傳輸問題的數據庫或 表名,您有兩種選擇:

在所有系統上使用lower_case_table_names = 1。這樣做的主要缺點 是,當你使用SHOW TABLES或SHOW DATABASES時,你做 看不到他們原來的lettercase中的名字。

在Unix上使用lower_case_table_names = 0,在 Windows上使用lower_case_table_names = 2。這保留了數據庫和表名的字母大小寫。 這樣做的缺點是,您必須確保您的陳述 始終在Windows上使用正確的 lettercase引用數據庫和表名。如果您將語句轉移到Unix,其中 lettercase很重要,但如果lettercase不正確,則它們不起作用。