Чувствительны ли имена таблиц в MySQL к регистру?

Чувствительны ли имена таблиц в MySQL к регистру?

На моей машине для разработки Windows код, который у меня есть, может запрашивать мои таблицы, которые выглядят как все в нижнем регистре. Когда я выполняю развертывание на тестовом сервере в нашем центре обработки данных, имена таблиц начинаются с заглавной буквы.

Все серверы, которые мы используем, находятся на Ubuntu.


person benstpierre    schedule 26.05.2011    source источник
comment
dev.mysql.com/doc/refman/5.6/ ru /   -  person Sam Dufel    schedule 26.05.2011


Ответы (5)


В целом:

Имена баз данных и таблиц не чувствительны к регистру в Windows и чувствительны к регистру в большинстве разновидностей Unix.

В MySQL базы данных соответствуют каталогам в каталоге данных. Каждая таблица в базе данных соответствует по крайней мере одному файлу в каталоге базы данных. Следовательно, чувствительность к регистру базовой операционной системы играет роль в чувствительности к регистру имен баз данных и таблиц.

Можно настроить способ хранения имен таблиц на диске с помощью системной переменной lower_case_table_names (в файле конфигурации my.cnf в разделе [mysqld]).

Прочтите раздел: 10.2.2 Чувствительность к регистру идентификатора для получения дополнительной информации.

person CloudyMarble    schedule 26.05.2011
comment
Это полностью меня обожгло, поскольку мой код отлично работал в моей локальной среде Windows, но вызывал исключения при переносе в производство на Linux !! Спасибо! - person benathon; 15.02.2013
comment
К этому ответу есть одно предостережение, которое не упоминается в документации: InnoDB не использует имена файлов или каталогов для баз данных и таблиц, и поэтому его объекты всегда регистр нечувствителен, даже если запущен в системе, чувствительной к регистру. См. Этот вопрос для примера того, что может пойти не так из-за этого: stackoverflow.com/questions/23182969/ - person Jules; 20.04.2014
comment
это еще не все. см. ответ Стивена Лемберта, поскольку он настраивается - person Chris Wood; 08.06.2016
comment
По умолчанию большинство компьютеров Mac используют файловую систему без учета регистра. Однако вы можете выбрать, чтобы ваша файловая система была чувствительна к регистру. - person Chad; 29.09.2016
comment
Это, а также чувствительность к регистру в именах файлов - одна из причин, побудивших меня перейти на Ubuntu в качестве веб-разработчика. - person Muhammad bin Yusrat; 14.12.2017

Имена баз данных и таблиц не чувствительны к регистру в Windows и чувствительны к регистру в большинстве разновидностей Unix или Linux.

Чтобы решить эту проблему, установите для lower_case_table_names значение 1

lower_case_table_names = 1

Это сделает все ваши таблицы строчными, независимо от того, как вы их пишете.

person StephenLembert    schedule 26.05.2011
comment
Они также не чувствительны к регистру в MacOS X, хотя базовый Unix. Вероятно, поэтому автозаполнение в MySQL на Mac чувствительно к регистру для имен таблиц или полей, хотя запросы - нет. - person David; 14.01.2016
comment
Да а куда поставить это заявление? Я предполагаю, что это: /etc/mysql/my.cnf под группой [mysql]. Но этого недостаточно, нужно еще кое-что сделать (кроме, конечно, перезапуска mysql ... - person Alg_D; 05.02.2016
comment
Это влияет только на новые таблицы. Перед изменением этого параметра существующие таблицы необходимо переименовать в нижний регистр. - person Martin; 12.04.2017

Это зависит от системной переменной lower_case_table_names:

show variables where Variable_name='lower_case_table_names'

Для этого есть три возможных значения:

  • 0 - регистр букв, указанный в выражении CREATE TABLE или CREATE DATABASE. При сравнении имен учитывается регистр.
  • 1 - имена таблиц сохраняются на диске в нижнем регистре, и при сравнении имен регистр не учитывается.
  • 2 - регистр букв, указанный в операторе CREATE TABLE или CREATE DATABASE, но MySQL преобразует их в нижний регистр при поиске. При сравнении имен регистр не учитывается.

Документация

person Raman Sahasi    schedule 26.06.2017

Имена таблиц в MySQL являются записями файловой системы, поэтому они нечувствительны к регистру, если базовая файловая система.

person Oswald    schedule 26.05.2011
comment
Я не думаю, что это всегда верно для таблиц InnoDB. - person Simon East; 12.11.2015
comment
@SimonEast Не могли бы вы назвать причину, по которой вы так думаете? - person Arya; 17.08.2019

  1. Найдите файл по адресу /etc/mysql/my.cnf

  2. Отредактируйте файл, добавив следующие строки:

     [mysqld]
    
     lower_case_table_names=1
    
  3. sudo /etc/init.d/mysql restart

  4. Запустите mysqladmin -u root -p variables | grep table, чтобы убедиться, что lower_case_table_names сейчас 1

Возможно, вам придется воссоздать эти таблицы, чтобы они заработали.

person sendon1982    schedule 20.01.2018