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

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

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

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

6 ответов

Решение

В общем:

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

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

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

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

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

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

lower_case_table_names = 1

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

Это зависит от 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 преобразует их в нижний регистр при поиске. Сравнение имен не чувствительно к регистру.

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

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

  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 сейчас

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

См. этот [документ][1]

Используйте low_case_table_names=0 в Unix и low_case_table_names=2 в Windows . [1]: https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html .

C:\Program Files\MySQL\MySQL Server XX\my.ini -> Изменить

Добавьте строку ниже после [mysqld]

low_case_table_names = 2

Другие вопросы по тегам