Spec-Zone .ru
спецификации, руководства, описания, API
|
В MySQL базы данных соответствуют каталогам в пределах каталога данных. Каждая таблица в пределах базы данных
соответствует по крайней мере одному файлу в пределах каталога базы данных (и возможно больше, в зависимости от
механизма хранения). Триггеры также соответствуют файлам. Следовательно, чувствительность случая базовой
операционной системы играет роль в чувствительности случая базы данных, таблицы, и триггерных имен. Это
означает, что такие имена не являются чувствительными к регистру в Windows, но являются чувствительными к
регистру в большинстве вариантов Unix. Одним известным исключением является Mac OS X, который Основан на Unix,
но использует тип файловой системы значения по умолчанию (HF +), который не является чувствительным к регистру.
Однако, Mac OS X также поддерживает объемы UFS, которые являются чувствительными к регистру так же, как на любом
Unix. См. Раздел 1.8.4, "SQL MySQL Extensions to
Standard". lower_case_table_names
системная переменная также влияет, как сервер
обрабатывает чувствительность к регистру идентификатора, как описано позже в этом разделе.
Хотя база данных, таблица, и триггерные имена не являются чувствительными к регистру на некоторых
платформах, недопустимо обратиться к одному из этих использующих различных случаев в пределах того же самого
оператора. Следующий оператор не работал бы, потому что он отсылает к таблице обоих как my_table
и как MY_TABLE
:
mysql> SELECT * FROM my_table WHERE
MY_TABLE.col=1;
Столбец, индексируйте, сохранил подпрограмму, и имена события не являются чувствительными к регистру на любой платформе, ни являются псевдонимами столбца.
Однако, имена групп файла журнала являются чувствительными к регистру. Это отличается от стандартного SQL.
По умолчанию табличные псевдонимы являются чувствительными к регистру на Unix, но не так на Windows или Mac OS
X. Следующий оператор не работал бы над Unix, потому что это отсылает к псевдониму обоих как a
и как A
:
mysql>SELECT
->col_name
FROMtbl_name
AS aWHERE a.
col_name
= 1 OR A.col_name
= 2;
Однако, этот тот же самый оператор разрешается на Windows. Чтобы избежать проблем, вызванных такими различиями, лучше принимать непротиворечивое соглашение, такое как всегда создание и обращение к базам данных и таблицам, используя строчные имена. Это соглашение рекомендуется для максимальной мобильности и простоты использования.
На то, как имена таблиц и имена базы данных сохранены на диске и используются в MySQL, влияют lower_case_table_names
системная переменная, которую можно установить, запускаясь
mysqld. lower_case_table_names
может принять значения, показанные в следующей
таблице. Эта переменная не влияет на чувствительность к регистру
триггерных идентификаторов. На Unix, значении по умолчанию lower_case_table_names
0. На Windows значение по умолчанию 1. На Mac OS X
значение по умолчанию 2.
Значение | Значение |
---|---|
0 |
Имена таблиц и имена базы данных сохранены на диске, используя lettercase, определенный в CREATE TABLE или CREATE DATABASE оператор. Сравнения имени являются чувствительными к
регистру. Недопустимо установить эту переменную в 0, если Вы
выполняете MySQL на системе, у которой есть нечувствительные к регистру имена файлов (такие как
Windows или Mac OS X). Если Вы вызываете эту переменную к 0 с --lower-case-table-names=0 на нечувствительной к регистру файловой
системе и доступе MyISAM имена таблиц используя различный lettercases,
индексируйте повреждение, может закончиться.
|
1 |
Имена таблиц сохранены в нижнем регистре на диске и называют сравнения, не являются чувствительными к регистру. MySQL преобразовывает все имена таблиц в нижний регистр на хранении и поиске. Это поведение также применяется к табличные псевдонимы и имена базы данных. |
2 |
Имена таблиц и имена базы данных сохранены на диске, используя lettercase, определенный в CREATE TABLE или CREATE DATABASE оператор, но MySQL преобразовывает их в нижний
регистр на поиске. Сравнения имени не являются чувствительными к регистру. Это работает только над файловыми системами, которые не являются
чувствительными к регистру! InnoDB имена таблиц сохранены в нижнем
регистре, что касаетсяlower_case_table_names=1 .
|
Если Вы используете MySQL только на одной платформе, Вы не должны обычно изменяться lower_case_table_names
переменная от ее значения по умолчанию. Однако, можно
встретиться с трудностями, если Вы хотите передать таблицы между платформами, которые отличаются по
чувствительности к регистру файловой системы. Например, на Unix, у Вас может быть две различных названные
таблицы my_table
и MY_TABLE
, но на Windows эти два
имени считают идентичными. Чтобы избежать проблем передачи данных, являющихся результатом lettercase имен базы
данных или имен таблиц, у Вас есть две опции:
Использовать lower_case_table_names=1
на всех
системах. Основной недостаток с этим - это, когда Вы используете SHOW TABLES
или SHOW DATABASES
, Вы не видите имена в их исходном lettercase.
Использовать lower_case_table_names=0
на Unix и lower_case_table_names=2
на Windows. Это сохраняет lettercase имен базы
данных и имен таблиц. Недостаток этого - то, что следует гарантировать, что Ваши операторы всегда
обращаются к Вашим именам базы данных и именам таблиц с корректным lettercase на Windows. Если Вы
передаете свои операторы Unix, где lettercase является существенным, они не работают, если lettercase
является неправильным.
Исключение: Если Вы используете InnoDB
таблицы и Вы пытаетесь избежать этих проблем передачи данных, следует установить lower_case_table_names
к 1 на всех платформах, чтобы вынудить
имена, которые будут преобразованы в нижний регистр.
Если Вы планируете установить lower_case_table_names
системная переменная к 1 на Unix, следует сначала
преобразовать свою старую базу данных и имена таблиц к нижнему регистру прежде, чем остановить mysqld и перезапустить это с новой переменной установкой.
Чтобы сделать это для отдельной таблицы, использовать RENAME TABLE
:
RENAME TABLE T1 TO t1;
Чтобы преобразовать одну или более всех баз данных, выведите их перед установкой lower_case_table_names
, тогда отбросьте базы данных, и перезагрузите их после
установки lower_case_table_names
:
Используйте mysqldump, чтобы вывести каждую базу данных:
mysqldump --databases db1 > db1.sqlmysqldump --databases db2 > db2.sql...
Сделайте это для каждой базы данных, которая должна быть воссоздана.
Использовать DROP DATABASE
отбрасывать каждую базу
данных.
Остановите сервер, установите lower_case_table_names
, и перезапустите сервер.
Перезагрузите файл дампа для каждой базы данных. Поскольку lower_case_table_names
устанавливается, каждое имя базы данных и имя
таблицы будут преобразованы в нижний регистр, поскольку это воссоздается:
mysql < db1.sqlmysql < db2.sql...
Имена объектов можно считать копиями, если их формы верхнего регистра равны согласно двоичному сопоставлению.
Это - истина для имен курсоров, условий, процедур, функций, точек сохранения, сохраненных стандартных
параметров, сохраненных локальных переменных программы, и плагинов. Это не истина для имен столбцов,
ограничений, баз данных, разделов, операторы, подготовленные с PREPARE
, таблицы, триггеры, пользователи, и определяемые пользователем
переменные.
Чувствительность к регистру файловой системы может влиять на поискы в строковых столбцах INFORMATION_SCHEMA
таблицы. Для получения дополнительной информации см. Раздел
10.1.7.9, "Сопоставление и INFORMATION_SCHEMA
Поискы".