Spec-Zone .ru
спецификации, руководства, описания, API
|
Есть корреспонденция между базой данных и табличными идентификаторами и именами в файловой системе. Для базовой
структуры MySQL представляет каждую базу данных как каталог в каталоге данных, и каждую таблицу одним или более
файлами в соответствующем каталоге базы данных. Для файлов формата таблицы (.FRM
),
данные всегда хранятся в этой структуре и расположении.
Для файлов данных и индексных файлов, точное представление на диске является определенным механизмом хранения.
Эти файлы могут храниться в том же самом расположении как FRM
файлы, или
информация могут храниться в отдельном файле. InnoDB
данные хранятся в файлах
данных InnoDB. Если Вы используете табличные области с InnoDB
, тогда определенные
файлы табличной области, которые Вы создаете, используются вместо этого.
Любой символ является законным в базе данных или табличных идентификаторах кроме ASCII NUL (0x00
). MySQL кодирует любые символы, которые проблематичны в соответствующих объектах
файловой системы, когда он создает каталоги базы данных или табличные файлы:
Основные латинские буквы (a..zA..Z
), цифры (0..9
) и подчеркивание (_
) кодируются, как.
Следовательно, их чувствительность к регистру непосредственно зависит от функций файловой системы.
Все другие национальные буквы от алфавитов, у которых есть отображение верхнего регистра/нижнего регистра, кодируются как показано в следующей таблице. Значения в столбце Code Range являются UCS 2 значения.
Диапазон кода | Образец | Число | Используемый | Неиспользованный | Блоки |
---|---|---|---|---|---|
00C0.. 017F | [0.. 4] [г.. z] | 5*20= 100 | 97 | 3 | Латинское 1 Дополнение + Расширенная-A латынь |
0370.. 03FF | [5.. 9] [г.. z] | 5*20= 100 | 88 | 12 | Греческий и коптский язык |
0400.. 052F | [г.. z] [0.. 6] | 20*7= 140 | 137 | 3 | Кириллица + Кириллическое Дополнение |
0530.. 058F | [г.. z] [7.. 8] | 20*2= 40 | 38 | 2 | Армянский язык |
2160.. 217F | [г.. z] [9] | 20*1= 20 | 16 | 4 | Формы числа |
0180.. 02AF | [г.. z] [a. k] | 20*11=220 | 203 | 17 | Латынь, Расширенная-B + Расширения IPA |
1E00.. 1EFF | [г.. z] [l. r] | 20*7= 140 | 136 | 4 | Латынь, Расширенная Дополнительный |
1F00.. 1FFF | [г.. z] [s. z] | 20*8= 160 | 144 | 16 | Расширенный греческий язык |
.... .... | [a. f] [г.. z] | 6*20= 120 | 0 | 120 | ЗАРЕЗЕРВИРОВАННЫЙ |
24B6.. 24E9 | [a. z] | 26 | 26 | 0 | Включенный Буквенно-цифровой индикатор |
FF21.. FF5A | [a. z] | 26 | 26 | 0 | Полуширина и Полноширинные формы |
Один из байтов в последовательности кодирует lettercase. Например: LATIN
CAPITAL LETTER A WITH GRAVE
кодируется как @0G
, тогда как LATIN SMALL LETTER A WITH GRAVE
кодируется как @0g
. Здесь третий байт (G
или g
) указывает на lettercase. (На нечувствительной к регистру файловой
системе обе буквы будут обработаны как то же самое.)
Для некоторых блоков, таких как Кириллица, второй байт определяет lettercase. Для других блоков, таких как Дополнение Latin1, третий байт определяет lettercase. Если два байта в последовательности являются буквами (как на Расширенном греческом языке), крайние левые стенды символа буквы для lettercase. Все другие байты буквы должны быть в нижнем регистре.
Все символы небуквы кроме подчеркивания (_
), так же
как буквы от алфавитов, у которых нет отображения верхнего регистра/нижнего регистра (такого как иврит)
кодируются, используя шестнадцатеричное представление, используя строчные буквы для шестнадцатеричных
цифр a..f
:
0x003F -> @003f0xFFFF -> @ffff
Шестнадцатеричные значения соответствуют символьным значениям в ucs2
двухбайтовый набор символов.
На Windows, некоторые имена такой как nul
, prn
, и
aux
кодируются, добавляя @@@
к имени, когда сервер
создает соответствующий файл или каталог. Это происходит на всех платформах для мобильности соответствующего
объекта базы данных между платформами.
Если у Вас есть базы данных или таблицы от версии MySQL, более старого чем 5.1.6, которые содержат специальные
символы и для которого базовые имена каталогов или имена файлов не были обновлены, чтобы использовать новое
кодирование, сервер выводит на экран их имена с префиксом #mysql50#
в выводе от
INFORMATION_SCHEMA
таблицы или SHOW
операторы. Например, если Вам назвали таблицу a@b
и его кодирование имени не было обновлено, SHOW TABLES
дисплеи это как это:
mysql> SHOW TABLES;
+----------------+| Tables_in_test |+----------------+| #mysql50#a@b |+----------------+
Чтобы обратиться к такому имени, для которого не было обновлено кодирование, следует предоставить #mysql50#
префикс:
mysql>SHOW COLUMNS FROM `a@b`;
ERROR 1146 (42S02): Table 'test.a@b' doesn't existmysql>SHOW COLUMNS FROM `#mysql50#a@b`;
+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| i | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+
Чтобы обновить старые названия, чтобы избавить от необходимости использовать специальный префикс, чтобы обратиться к ним, повторно закодируйте их с mysqlcheck. Следующая команда обновляет все имена к новому кодированию:
shell> mysqlcheck --check-upgrade --fix-db-names
--fix-table-names --all-databases
Чтобы проверить только определенные базы данных или таблицы, опустить --all-databases
и обеспечьте соответствующую базу данных или табличные параметры.
Для получения информации о mysqlcheck синтаксисе вызова см. Раздел
4.5.3, "mysqlcheck — Табличная Программа Обслуживания"
.
#mysql50#
префикс предназначается только, чтобы использоваться
внутренне сервером. Недопустимо создать базы данных или таблицы с именами, которые используют этот префикс.
Кроме того, mysqlcheck не может фиксировать имена, которые содержат
литеральные экземпляры @
символ, который используется для того, чтобы
закодировать специальные символы. Если у Вас есть базы данных или таблицы, которые содержат этот символ,
используют mysqldump, чтобы вывести их прежде, чем обновить до
MySQL 5.1.6 или позже, и затем перезагрузить файл дампа после обновления.