資料庫和表格識別符與檔案系統中的名稱之間存在對應關係。對於基本結構,MySQL 將每個資料庫表示為資料目錄中的一個目錄,並且根據儲存引擎,每個表格可能由適當資料庫目錄中的一個或多個檔案表示。
對於資料和索引檔案,磁碟上的確切表示方式是儲存引擎特定的。這些檔案可以儲存在資料庫目錄中,或者資訊可以儲存在單獨的檔案中。InnoDB
資料儲存在 InnoDB 資料檔案中。如果您將表格空間與 InnoDB
搭配使用,則會改為使用您建立的特定表格空間檔案。
除了 ASCII NUL (X'00'
) 之外,任何字元在資料庫或表格識別符中都是合法的。當 MySQL 建立資料庫目錄或表格檔案時,它會對應檔案系統物件中任何有問題的字元進行編碼。
基本拉丁字母 (
a..zA..Z
)、數字 (0..9
) 和底線 (_
) 會按原樣編碼。因此,它們的大小寫敏感性直接取決於檔案系統的特性。下表顯示了所有其他來自具有大寫/小寫對應的字母表的國家字母的編碼方式。「程式碼範圍」欄中的值為 UCS-2 值。
程式碼範圍 模式 數字 已使用 未使用 區塊 00C0..017F [@][0..4][g..z] 5*20= 100 97 3 Latin-1 補充 + Latin Extended-A 0370..03FF [@][5..9][g..z] 5*20= 100 88 12 希臘語和科普特語 0400..052F [@][g..z][0..6] 20*7= 140 137 3 西里爾語 + 西里爾語補充 0530..058F [@][g..z][7..8] 20*2= 40 38 2 亞美尼亞語 2160..217F [@][g..z][9] 20*1= 20 16 4 數字形式 0180..02AF [@][g..z][a..k] 20*11=220 203 17 Latin Extended-B + IPA 延伸 1E00..1EFF [@][g..z][l..r] 20*7= 140 136 4 Latin Extended Additional 1F00..1FFF [@][g..z][s..z] 20*8= 160 144 16 希臘語擴充 .... .... [@][a..f][g..z] 6*20= 120 0 120 保留 24B6..24E9 [@][@][a..z] 26 26 0 封閉字母數字 FF21..FF5A [@][a..z][@] 26 26 0 半形和全形形式 序列中的其中一個位元組對字母大小寫進行編碼。例如:
帶重音符號的拉丁大寫字母 A
編碼為@0G
,而帶重音符號的拉丁小寫字母 A
編碼為@0g
。此處第三個位元組 (G
或g
) 指示字母大小寫。(在不區分大小寫的檔案系統上,兩個字母都被視為相同。)對於某些區塊,例如西里爾語,第二個位元組確定字母大小寫。對於其他區塊,例如 Latin1 補充,第三個位元組確定字母大小寫。如果序列中的兩個位元組是字母 (如希臘語擴充),則最左邊的字母字元代表字母大小寫。所有其他字母位元組都必須是小寫。
除了底線 (
_
) 以外的所有非字母字元,以及來自沒有大寫/小寫對應的字母表 (例如希伯來語) 的字母,都使用十六進位表示法進行編碼,並使用小寫字母表示十六進位數字a..f
。0x003F -> @003f 0xFFFF -> @ffff
十六進位值對應於
ucs2
雙位元組字元集中的字元值。
在 Windows 上,當伺服器建立對應的檔案或目錄時,某些名稱 (例如 nul
、prn
和 aux
) 會透過附加 @@@
來編碼。為了對應資料庫物件在平台之間的移植性,所有平台上都會發生這種情況。
如果以下名稱用於結構描述或表格名稱中,則會保留這些名稱並附加 @@@
CON
PRN
AUX
NUL
COM1 到 COM9
LPT1 到 LPT9
CLOCK$ 也是這組保留名稱的成員,但不會附加 @@@
,而是 @0024
。也就是說,如果 CLOCK$ 用作結構描述或表格名稱,則會以 CLOCK@0024
寫入檔案系統。對於在結構描述或表格名稱中使用 $ (錢幣符號) 的任何情況,情況也是如此;它在檔案系統上會被取代為 @0024
。
這些名稱也以其附加形式寫入 INNODB_TABLES
,但以使用者輸入的未附加形式寫入 TABLES
。