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



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



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



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

638   5  

5 ответов:

В Общем:

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

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

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

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

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

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

lower_case_table_names=1

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

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

это зависит от lower_case_table_names системная переменная:

show variables where Variable_name='lower_case_table_names'

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

  • 0 - lettercase, указанный в CREATE TABLE или CREATE DATABASE заявление. Сравнение имен чувствительно к регистру.
  • 1 - имена таблиц хранятся в нижнем регистре на диске и сравнения имен не чувствительны к регистру.
  • 2 - lettercase, указанный в CREATE TABLE или CREATE DATABASE заявление, но 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 теперь

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

Comments

    Ничего не найдено.