在数据库和表标识符与文件系统中的名称之间存在对应关系。对于基本结构,MySQL 将每个数据库表示为数据目录中的一个目录,并且根据存储引擎,每个表可能由一个或多个文件在适当的数据库目录中表示。
对于数据和索引文件,exact 表示在磁盘上的存储引擎特定。这些文件可能存储在数据库目录中,或者信息可能存储在单独的文件中。InnoDB
数据存储在 InnoDB 数据文件中。如果您使用带有 InnoDB
的表空间,那么您创建的特定表空间文件将被使用。
任何字符都是数据库或表标识符中合法的,除了 ASCII NUL (X'00'
)。MySQL 在创建数据库目录或表文件时对问题字符进行编码:
-
基本拉丁字母 (
a..zA..Z
)、数字 (0..9
) 和下划线 (_
) 按原样编码。因此,它们的大小写敏感性直接取决于文件系统的特性。 -
所有其他国家字母从字母表中具有大小写映射的字母被编码如下表所示。Code Range 列中的值是 UCS-2 值。
Code Range Pattern Number Used Unused Blocks 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 拉丁扩展 Additional 1F00..1FFF [@][g..z][s..z] 20*8= 160 144 16 希腊语扩展 .... .... [@][a..f][g..z] 6*20= 120 0 120 RESERVED 24B6..24E9 [@][@][a..z] 26 26 0 半角和全角形式 FF21..FF5A [@][a..z][@] 26 26 0 Halfwidth and Fullwidth forms 序列中的一个字节编码字母大小写。例如:
LATIN CAPITAL LETTER A WITH GRAVE
编码为@0G
,而LATIN SMALL LETTER A WITH GRAVE
编码为@0g
。这里第三个字节 (G
或g
) 表示字母大小写。(在不区分大小写的文件系统上,两个字母被视为相同。)对于某些块,例如西里尔语,第二个字节确定字母大小写。对于其他块,例如拉丁-1 补充,第三个字节确定字母大小写。如果序列中的两个字节都是字母(例如希腊语扩展),那么左侧字母字符表示字母大小写。所有其他字母字节必须是小写。
-
所有非字母字符,除了下划线 (
_
),以及来自没有大小写映射的字母表的字母(例如希伯来语),使用十六进制表示法,使用小写字母表示十六进制数字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
中。