2012-11-09 37 views
0

我有一個表「表2」其中有一個指標叫做「MYINDEX」
我的問題是,當我使用這個指數的捧場,如:在MySQL中是否被命名爲索引區分大小寫?

select a from table1 left join table2 use index (MYINDEX) 

是否等同於以下查詢?

select a from table1 left join table2 use index (myindex) 
+0

在SQL中,大寫和小寫字母是等價的。在Mysql中,它們可能不是。 – wildplasser

回答

0

在MySQL中,數據庫和表名可能區分大小寫,具體取決於服務器操作系統和mysqld選項。列,索引,存儲的例程和事件名稱始終不區分大小寫。請參閱MySQL documentation

+0

實際上我之前讀過這個文檔,但事情並不清楚。這是否意味着命名索引名稱不區分大小寫,或者當您定義索引時,用於定義索引的列名是不區分大小寫的。 –

+0

列名稱**總是**不區分大小寫。這包括定義索引時。 – Barmar

+0

對不起,誤解了這個問題。但它是一樣的。所有索引名稱的使用都是不區分大小寫的。 – Barmar

0

my earlier posts之後,Linux和Windows在兩種操作系統如何存儲表名稱(僅允許小寫)之間存在差異。這可以通過lower_case_table_names系統變量來控制。您的Windows安裝,可能已將該值設置爲1,你的Linux服務器有這個值設置爲0。按照用戶手冊的"Identifier Case Sensitivity"一部分,你有兩個選擇:

在所有系統上使用lower_case_table_names=1。與此 的主要缺點是,當您使用SHOW TABLESSHOW DATABASES,你做 看不到他們的原始lettercase中的名稱。

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

至於索引名稱,我會在與數據庫名稱,表名稱和/或列名稱相同的問題上處理它。爲了安全起見,假設將來你可能會遇到這個問題。

一些鏈接: