### 9.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][一个..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 | 半角和全角形式 |

    序列中的一个字节编码字母大小写。例如：`带有 GRAVE 的拉丁文大写字母 A`被编码为`@0G`， 然而`带有 GRAVE 的拉丁文小写字母 A`被编码为`@0g`.这里是第三个字节（`G`要么`g`) 表示字母大小写。（在不区分大小写的文件系统上，两个字母被视为相同。）

    对于某些块，例如 Cyrillic，第二个字节确定字母大小写。对于其他块，例如 Latin1 Supplement，第三个字节确定字母大小写。如果序列中的两个字节是字母（如希腊扩展），最左边的字母字符代表字母大小写。所有其他字母字节必须小写。

-   除下划线 (`_`)，以及来自没有大写/小写映射的字母（例如希伯来语）使用十六进制表示编码，使用小写字母表示十六进制数字`a..f`：

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

    十六进制值对应于`ucs2`双字节字符集。

    在 Windows 上，一些名称如`无`,`prn`， 和`辅助`通过附加编码`@@@`到服务器创建相应文件或目录时的名称。这发生在所有平台上，以实现平台之间相应数据库对象的可移植性。
