Являются ли имена таблиц в MySQL чувствительными к регистру? - PullRequest
144 голосов
/ 26 мая 2011

Являются ли имена таблиц в MySQL чувствительными к регистру?

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

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

Ответы [ 5 ]

165 голосов
/ 26 мая 2011

В общем:

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

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

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

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

90 голосов
/ 26 мая 2011

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

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

lower_case_table_names = 1

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

19 голосов
/ 26 мая 2011

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

12 голосов
/ 26 июня 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 преобразовывает их в нижний регистр при поиске. При сравнении имен не учитывается регистр.

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

4 голосов
/ 20 января 2018
  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 сейчас

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

...