Блог Vaden Pro

Все о самостоятельном создании и продвижении сайтов

Чувствительность имен к регистру в MySQL

Раздел: 

Для понимания того факта, что в 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;
    Команда не исполнится, так как к псевдониму в ней обращаются разными образами: «Zz» и «zz».
  • Даже работая под Виндовс мы получим не рабочую команду, если будем ссылаться на одну и ту же БД/таблицу  пользуясь раными регистрами букв в пределах одного запроса, к примеру так:
    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'