Spec-Zone.ru › MySQL 9.2

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 Latin-1 Supplement + 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 Latin Extended-B + IPA Extensions
    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, третий байт определяет регистр буквы. Если два байта в последовательности являются буквами (как в расширенном греческом), левая буква используется для указания регистра. Все остальные байты букв должны быть в нижнем регистре.

  • Все символы, не являющиеся буквами, кроме подчёркивания (_), а также буквы из алфавитов, не имеющих отображения верхнего и нижнего регистра (таких как иврит), кодируются с использованием шестнадцатеричного представления с использованием строчных букв для шестнадцатеричных цифр 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 в их первоначальной форме, как ввели пользователь.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/identifier-mapping.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API