MySQL 8.4 參考手冊  /  ...  /  識別符號對應到檔案名稱

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 拉丁語-1 補充 + 拉丁語擴展-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 拉丁語擴展-B + IPA 擴展
    1E00..1EFF [@][g..z][l..r] 20*7= 140 136 4 拉丁語擴展附加
    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 半形和全形形式

    序列中的其中一個位元組會編碼字母大小寫。例如:LATIN CAPITAL LETTER A WITH GRAVE 編碼為 @0G,而 LATIN SMALL LETTER A WITH GRAVE 編碼為 @0g。這裡第三個位元組 (Gg) 表示字母大小寫。(在不區分大小寫的檔案系統中,這兩個字母會被視為相同。)

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

  • 所有非字母字元 (底線除外 (_)),以及來自不具有大小寫映射的字母(例如希伯來語)的字母,都會使用十六進位表示法進行編碼,其中十六進位數字使用小寫字母 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