MySQL 9.0 參考手冊  /  ...  /  識別符與檔案名稱的對應

11.2.4 識別符與檔案名稱的對應

資料庫和表格識別符與檔案系統中的名稱之間存在對應關係。對於基本結構,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。此處第三個位元組 (Gg) 指示字母大小寫。(在不區分大小寫的檔案系統上,兩個字母都被視為相同。)

    對於某些區塊,例如西里爾語,第二個位元組確定字母大小寫。對於其他區塊,例如 Latin1 補充,第三個位元組確定字母大小寫。如果序列中的兩個位元組是字母 (如希臘語擴充),則最左邊的字母字元代表字母大小寫。所有其他字母位元組都必須是小寫。

  • 除了底線 (_) 以外的所有非字母字元,以及來自沒有大寫/小寫對應的字母表 (例如希伯來語) 的字母,都使用十六進位表示法進行編碼,並使用小寫字母表示十六進位數字 a..f

    0x003F -> @003f
    0xFFFF -> @ffff

    十六進位值對應於 ucs2 雙位元組字元集中的字元值。

在 Windows 上,當伺服器建立對應的檔案或目錄時,某些名稱 (例如 nulprnaux) 會透過附加 @@@ 來編碼。為了對應資料庫物件在平台之間的移植性,所有平台上都會發生這種情況。

如果以下名稱用於結構描述或表格名稱中,則會保留這些名稱並附加 @@@

  • CON

  • PRN

  • AUX

  • NUL

  • COM1 到 COM9

  • LPT1 到 LPT9

CLOCK$ 也是這組保留名稱的成員,但不會附加 @@@,而是 @0024。也就是說,如果 CLOCK$ 用作結構描述或表格名稱,則會以 CLOCK@0024 寫入檔案系統。對於在結構描述或表格名稱中使用 $ (錢幣符號) 的任何情況,情況也是如此;它在檔案系統上會被取代為 @0024

注意

這些名稱也以其附加形式寫入 INNODB_TABLES,但以使用者輸入的未附加形式寫入 TABLES