文件系统中的数据库和表标识符和名称之间存在对应关系。对于基本结构,MySQL 将每个数据库表示为数据目录中的一个目录,并且根据存储引擎的不同,每个表可能由相应数据库目录中的一个或多个文件表示。
对于数据和索引文件,磁盘上的确切表示是特定于存储引擎的。这些文件可能存储在数据库目录中,也可能将信息存储在单独的文件中。InnoDB
数据存储在 InnoDB 数据文件中。如果您将表空间与 一起使用
InnoDB
,则会改用您创建的特定表空间文件。
X'00'
除 ASCII NUL ( )
外,任何字符在数据库或表标识符中都是合法的。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,第三个字节决定字母大小写。如果序列中的两个字节是字母(如 Greek Extended),则最左边的字母字符代表字母大小写。所有其他字母字节必须小写。
除了下划线 (
_
) 之外的所有非字母字符,以及没有大写/小写映射的字母表中的字母(例如希伯来语)都使用十六进制表示法进行编码,使用小写字母表示十六进制数字a..f
:0x003F -> @003f 0xFFFF -> @ffff
十六进制值对应于
ucs2
双字节字符集中的字符值。
在 Windows 上,某些名称(例如nul
、
prn
和)在服务器创建相应文件或目录时aux
通过附加到名称进行编码。@@@
这发生在所有平台上,以实现平台之间相应数据库对象的可移植性。
@@@
如果在架构或表名称中使用,
以下名称将被保留并附加
:
缺点
PRN
辅助
空值
COM1 到 COM9
LPT1 到 LPT9
CLOCK$ 也是这组保留名称的成员,但没有附加@@@
,而是
附加@0024
。也就是说,如果 CLOCK$ 用作模式或表名,它会作为
CLOCK@0024
. 在模式或表名中使用 $(美元符号)也是如此;它在文件系统上被替换为
@0024
。
这些名称也
INNODB_TABLES
以其附加形式写入,但以TABLES
用户输入的未附加形式写入。