标识符到文件名的映射
文件系统中的数据库和表标识符以及名称之间存在对应关系。对于基本结构,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 拉丁扩展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
。此处的第三个字节(G
或g
)表示字母大小写。(在不区分大小写的文件系统上,两个字母将被视为相同。)对于某些块(例如西里尔字母),第二个字节确定字母大小写。对于其他块,例如Latin1 Supplement,第三个字节确定字母大小写。如果序列中的两个字节是字母(如希腊扩展),则最左边的字母字符代表字母大写。所有其他字母字节必须小写。
除下划线(
_
)之外的所有非字母字符,以及不具有大写/小写映射的字母(例如希伯来语)均使用十六进制表示形式编码,小写字母表示十六进制数字..
:0x003F -> @003f 0xFFFF -> @
十六进制值对应于
ucs2
双字节字符集中的字符值。
在Windows上,当服务器创建相应的文件或目录时,某些名称(如nul
,,prn
和) ux
通过附加@@@
在名称上进行编码。在所有平台上都会发生这种情况,以实现平台之间相应数据库对象的可移植性。