Для понимания того факта, что в MySQL при одном раскладе регистр символов в именах таблиц и баз данных имеет значение, а при ином нет мы должны разобраться с причинами такого поведения.
Сами по себе таблицы и базы данных соответствуют файлам и директориям операционной системы на которой в конкретном случае работает MySQL. Из чего вытекает ряд следствий:
- Под Windows и Mac OS X регистр символов в именах значения иметь не будет
- Под большей частью Unix систем базы данных будут обращать внимание на регистр.
Есть еще ряд нюансов, которые необходимо понимать при составлении запросов и названий БД с таблицами:
- Регистр символов не имеет значения при работе с названиями столбцов в таблицах. Как при обозначении их имен, так и при обозначении их псевдонимов.
- Именуя таблицы стоит учитывать, что псевдоним названия будет различать строчные и прописные буквы в названии. К примеру:
mysql> SELECT col_name FROM tbl_name AS zz -> WHERE zz.col_name = 1 OR Zz.col_name = 2;
- Даже работая под Виндовс мы получим не рабочую команду, если будем ссылаться на одну и ту же БД/таблицу пользуясь раными регистрами букв в пределах одного запроса, к примеру так:
mysql> SELECT * FROM fist _tab WHERE FIRST_TAB.col=1;
Как избежать ошибок в именах связанных с регистром символов?
- Широко распространен прием использования только строчных символов в именах на MySQL. Такой подход позволяет не думать лишний раз где и когда в коде были применены Прописные или строчные символы. Разработчик уже знает, что везде были использованы строчные буквы.
- Если исходно имена давались без оглядки на регистр, то можно воспользоваться демоном MySQL для преобразования всех названий к единому виду: lower_case_table_names=1 Исходно он равен 1 в Виндовс и 0 в Юникс. Принцип работы достаточно прост- при обработке названий таблиц все символы в них будут обрабатываться как строчные. Стоит также отметить, что если перед изменением рассматриваемого нами параметра все старые названия таблиц не были приведены к нижнему регистру, то могут возникнуть проблемы при запуске БД.
- Для приведения к единому виду расширений файлов, к примеру при переносе БД с одного сервера на другой, особенно когда на них используются различные операционные системы, может быть полезна mysql_fix_extensions – это утилита из подкаталога script. Она способна привести к единому регистру расширения файлов из любой директории БД. Для нижнего регистра используем - `.frm', верхнего - `.MYI' и `.MYD'