Поиск
Чувствительность идентификаторов к регистру
В MySQL базы данных соответствуют подкаталогам каталога данных. Таблицы внутри базы данных соответствуют, как минимум, одному файлу, находящемуся внутри подкаталога (а возможно, и большему числу файлов, в зависимости от применяемого механизма хранения). Следовательно, зависимость от регистра имен файлов и каталогов базовой операционной системы определяет зависимость от регистра имен баз данных и таблиц. Это означает, что имена баз и таблиц не зависят от регистра в Windows, но зависят в большинстве вариантов Unix. Одним заслуживающим упоминания исключением является система Mac OS X, которая основана на Unix, но использует по умолчанию файловую систему (HFS+), имена в которой не зависят от регистра. Однако Mac OS X также поддерживает тома UFS, в которых имена чувствительны к регистру, как в любой системе Unix. См. раздел Стандарты, которым соответствует MySQL
На заметку!
* Несмотря на то что имена баз данных и таблиц нечувствительны к регистру в некоторых плат-
• f формах, вы не должны обращаться к базе данных или таблице, используя различные регистры, в
t. пределах одного запроса. Следующий запрос не будет работать, потому что обращается к таб-
й лице и каккту_1:аЫе, и каккМУ_ТАВЬЕ:
§ mysql SELECT * FROM my_table WHERE MYJTABLE.col=l;
Имена столбцов, индексов и псевдонимы столбцов не зависят от регистра в любой платформе.
Псевдонимы таблиц были чувствительны к регистру до версии MySQL 4.1.1. Следующий запрос не будет работать, поскольку обращается к псевдониму и как к а, и как к а:
mysql SELECT имя_столбца FROM имя_таблицы AS a
- WHERE a.имя_столбца = 1 OR к.имя_столбца = 2;
Если у вас возникают сложности с запоминанием допустимых регистров для имен баз данных и таблиц, примите непротиворечивое соглашение, например, всегда создавать базы данных и таблицы с именами в нижнем регистре.
lower_case_table_names может принимать одно из следующих значений:
Значение Смысл
- Имена баз данных и таблиц сохраняются на диске, используя регистр, указанный
в операторе CREATE TABLE или CREATE DATABASE. При сравнении имен регистр
учитывается. Это значение по умолчанию для систем Unix. Следует отметить,
что в случае установки этого значения равным 0 с помощью опции
-lower_case_table_names=0 в нечувствительной к регистру операционной
системе, и обращении к именам таблиц MyISAM с использованием разных реги
стров символов могут повредиться индексы. - Имена таблиц сохраняются в нижнем регистре и сравнения имен нечувствитель
ны крегистру.MySQLпреобразует все имена таблиц к нижнему регистру при
сохранении и поиске. Это поведение также относится к именам баз данных, на
чиная с версии MySQL 4.0.2, и псевдонимам имен таблиц, начиная с версии
MySQL 4.1.1. Это значение по умолчанию в системах Windows и Mac OS X. - Имена баз данных и таблиц сохраняются на диске, используя регистр, указанный
в операторе CREATE TABLE или CREATE DATABASE, но MySQL преобразует их к
нижнему регистру при поиске. Сравнения имен нечувствительны к регистру.
Следует отметить, что это работает только в файловых системах, имена в кото
рых нечувствительны к регистру. Имена таблиц InnoDB сохраняются в нижнем
регистре, как при lower_case_table_names=l.
Установка lower_case_table_names равным 2 возможна, начиная с версии
MySQL 4.0.18.
Если вы эксплуатируете MySQL только на одной платформе, обычно вам незачем изменять значение переменной lower_case_table_names. Однако вы можете столкнуться с трудностями при переносе таблицы между платформами, которые по-разному относятся к регистру символов в именах. Например, в Unix вы можете иметь две разные таблицы с именами my_table и my_table, тогда как в Windows эти имена рассматриваются как одно и то же. Чтобы избежать проблем переноса, вызванных регистром символов имен таблиц, существует два выбора:
а Использовать lower_case_table_names=l во всех системах. Главное неудобство, связанное с этим, состоит в том, что когда вы используете SHOW TABLES или SHOW DATABASES, то не увидите имена в их истинном регистре.
- Использовать Iower_case_table_names=0 в системах Unix и Iower_case_table_names=2 в системах Windows. Это предохранит регистр символов в именах баз и таблиц. Неудобство такого решения связано с необходимостью гарантирования, что запросы в Windows всегда обращаются к таблицам в правильном регистре. Если вы переносите запросы в среду Unix, где регистр имеет значение, они не будут работать, если регистр символов не тот.
Следует отметить, что перед установкой lower_case_table_names равным 1 в Unix вы должны сначала преобразовать старые имена баз и таблиц к нижнему регистру перед перезапуском mysqld.