Spec-Zone.ru › MySQL 8.4

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
    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-8.4-en/identifier-mapping.html

Spec-Zone.ru

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