Являются ли имена таблиц в 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 являются записями файловой системы, поэтому они не чувствительны к регистру, если базовая файловая система такова.
Найдите файл в
/etc/mysql/my.cnf
Отредактируйте файл, добавив следующие строки:
[mysqld]
lower_case_table_names=1
sudo /etc/init.d/mysql restart
бежать
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