9.2.2. Чувствительность регистра идентификатора В MySQL базы данных соответствуют каталогам в каталоге данных. Каждая таблица в базе данных соответствует хотя бы одному файлу в каталоге базы данных (и возможно, больше, в зависимости от механизма хранения). Следовательно, чувствительность к регистру базовой операционной системы играет определенную роль в чувствительность к регистру базы данных и таблиц. Это означает, что база данных и имена таблиц в Windows не чувствительны к регистру, а чувствительны к регистру в большинстве разновидностей Unix. Одним из примечательных исключений является Mac OS X, Unix-based, но использует тип файловой системы по умолчанию (HFS +), который не является случайным чувствительны. Однако Mac OS X также поддерживает тома UFS, которые являются примерами как и на любом Unix. См. Раздел 1.8.4 "Расширения MySQL для Стандартный SQL". Системная переменная 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 FROM tbl_name AS a - > WHERE a.col_name = 1 ИЛИ 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 Имена таблиц и баз данных хранятся на диске, используя буквенный регистр, указанный в инструкции CREATE TABLE или CREATE DATABASE. Сравнение имен чувствительно к регистру. Вы не должны устанавливать эту переменную до 0, если вы используете MySQL в системе, которая нечувствительна к регистру имена файлов (например, Windows или Mac OS X). Если вы заставляете эту переменную до 0 с --lower-case-table-names = 0 в файловой системе без учета регистра и доступ к табличным именам MyISAM с использованием разных почтовых индексов, индекс коррупция. 1 Названия таблиц хранятся в нижнем регистре на диске и сопоставления имен не чувствительны к регистру. MySQL преобразует всю таблицу имена в нижнем регистре при хранении и поиске. Такое поведение также применяется к именам баз данных и псевдонимам таблиц. 2 Имена таблиц и баз данных хранятся на диске, используя буквенный регистр, указанный в CREATE TABLE или CREATE DATABASE, но MySQL преобразует их в нижний регистр Погляди. Сравнение имен не чувствительно к регистру. Это работает только на файловые системы, которые не чувствительны к регистру! Имена таблиц InnoDB хранятся в нижнем регистре, как для lower_case_table_names = 1. Если вы используете MySQL на одной платформе, обычно вам не нужно менять lower_case_table_names из значения по умолчанию. Однако вы могут возникнуть трудности, если вы хотите перенести таблицы между платформы, которые отличаются чувствительностью к регистру файловой системы. Например, на Unix, вы можете иметь две разные таблицы с именем my_table и MY_TABLE, но в Windows эти два имени считаются идентичными. Чтобы избежать данных проблемы переноса, возникающие из буквенного обозначения имен базы данных или таблиц, у вас есть два варианта:
Используйте lower_case_table_names = 1 для всех систем. Основным недостатком при этом вы используете SHOW TABLES или SHOW DATABASES, вы делаете не видите имена в их исходном буклете.
Использовать lower_case_table_names = 0 в Unix и lower_case_table_names = 2 on Окна. Это сохраняет регистр букв имен баз данных и таблиц. Недостатком этого является то, что вы должны убедиться, что ваши заявления всегда ссылайтесь на свою базу данных и имена таблиц с правильными регистр букв в Windows. Если вы передадите свои заявления в Unix, где регистр букв является значительным, они не работают, если буква неверно.
Исключение: если вы используете таблицы InnoDB, и вы пытаетесь избежать эти проблемы передачи данных, вы должны установить lower_case_table_names для 1 на всех платформах, чтобы заставить имена преобразовываться в нижний регистр.
Если вы планируете установить системную переменную lower_case_table_names на 1 на Unix, вы должны сначала преобразовать старые имена и имена таблиц в в нижнем регистре перед тем, как остановить mysqld и перезапустить его с помощью нового переменная. Чтобы сделать это для отдельной таблицы, используйте RENAME Таблица:
RENAME TABLE T1 TO t1; Чтобы конвертировать одну или несколько целых баз данных, дамп их перед установкой lower_case_table_names, затем отбросьте базы данных, и перезагрузите их после установки lower_case_table_names:
Использовать mysqldump для удаления каждой базы данных:
mysqldump --databases db1 > db1.sql mysqldump --databases db2 > db2.sql... Сделайте это для каждой базы данных, которая должна быть воссоздана.
Используйте DROP DATABASE для удаления каждой базы данных.
Остановите сервер, установите lower_case_table_names и перезапустите сервер.
Загрузите файл дампа для каждой базы данных. Потому что lower_case_table_names, каждая база данных и имя таблицы будут преобразованы в нижний регистр, как он воссоздан:
mysql < db1.sql mysql < db2.sql... Имена объектов могут быть рассмотрены дублирует, если их формы в верхнем регистре равны в соответствии с двоичным сверка. Это верно для названий курсоров, условий, процедур, функции, точки сохранения, хранимые параметры процедуры и сохраненная программа локальные переменные. Это неверно для имен имен столбцов, ограничения, базы данных, заявления, подготовленные с помощью PREPARE, таблицы, триггеры, пользователи и пользовательские переменные.