MySQL教程14-MySQL中SQL語句的大小寫規則
SQL 語句的大小寫規則與語句組成元素、引用內容和伺服器所使用的作業系統有關。
1) SQL 關鍵字和函式名
SQL 的關鍵字和函式名不區分大小寫。例如,下面這些語句都是等價的:
SELECT NOW(); select now(); sElEcT nOw();
2) 資料庫名、表名和檢視名
MySQL用伺服器主機的底層檔案系統所包含的目錄和檔案來表示資料庫和表。因此,資料庫名和表名的預設大小寫取決於伺服器主機的作業系統在命名方面的規定。
比如 Windows 系統的檔名不區分大小寫,所以執行在 Windows 系統上面的 MySQL 伺服器也不用區分資料庫名和表名的大小寫。Linux 系統的檔名區分大小寫,所以執行在 Linux 系統上的 MySQL 伺服器需要區分資料庫名和表名的大小寫。對於 Mac OS X 平臺,其檔案系統中的名字是個例外,它們不區分大小寫。
MySQL 會使用一個檔案來表示一個檢視,所以以上與表有關的也同樣適用於檢視。
3) 儲存程式的名字
儲存函式、儲存過程和事件的名字都不區分大小寫。觸發器的名字要區分大小寫,這一點與標準 SQL 的行為有所不同。
4) 列名和索引名
在 MySQL 裡,列名和索引名都不區分大小寫。例如,下面這些語句都是等價的:
SELECT name FROM student ; SELECT NAME FROM student ; SELECT nAmE FROM student ;
5) 別名的名字
預設情況下,表的別名要區分大小寫。SQL 語句中可以使用任意的大小寫(大寫、小寫或大小寫混用)來指定一個別名。如果需要在同一條語句裡多次用到同一個別名,則必須讓它們的大小寫保持一致。
下表總結了 SQL 元素在 Windows 和 Linux 系統是否區分大小寫。
Windows | Linux | |
---|---|---|
資料庫名 | 否(忽略大小寫) | 是 |
表名 | 是 | |
表別名 | 是 | |
列名 | 否(忽略大小寫) | |
列別名 | 否(忽略大小寫) | |
變數名 | 是 |
在 Linux 伺服器下建立資料庫和表時,應該認真考慮大小寫的問題,比如它們以後是否會遷移到 Windows 伺服器上。
假設你在 Linux 伺服器上建立了 abc 和 ABC 兩個表,當把這兩個表遷移到 Windows 伺服器上時,就會出現問題;因為 Windows 系統並不區分大小寫,abc 和 ABC 無差別。如果把表從 Linux 伺服器遷移到 Windows 伺服器時,也同樣會遇到問題。
想要避免大小寫問題,可以先選定一種大小寫方案,然後一直按照該方案去建立資料庫和表。
在阿里巴巴Java開發手冊的 MySql 建表規約裡提到:
【強制】表名、欄位名必須使用小寫字母或數字,禁止出現數字開頭,禁止兩個下劃線中間只出現數字。資料庫欄位名的修改代價很大,因為無法進行預釋出,所以欄位名稱需要慎重考慮。
通俗的說就是,MySQL 在 Windows 系統下不區分大小寫,但在 Linux 系統下預設區分大小寫。因此,資料庫名、表名和欄位名,都不允許出現任何大寫字母,避免節外生枝。
一般建議統一使用小寫字母,並且 InnoDB 引擎在其內部都是以小寫字母方式來儲存資料庫名和表名的。這樣可以有效的防止 MySQL 產生大小寫問題。