Как изменить имена таблиц MySQL на сервере Linux, чтобы они не зависели от регистра?
Я работаю над старым веб-сайтом, который раньше был размещен на сервере Apple. Когда он был перенесен на новый Linux-сервер, он перестает работать. Я уверен, что все запросы MySQL, используемые в сценариях php, имеют разные комбинации случаев для имен таблиц (я не знаю, почему оригинальные разработчики не соблюдали никаких соглашений при создании имен таблиц или скриптов php), и это не имело значения, так как серверы Mac и Windows MySQL по умолчанию не чувствительны к регистру, когда дело доходит до этого. Однако Linux не работает.
Есть ли способ изменить Linux по умолчанию на MySQL, поэтому он становится нечувствительным к регистру и работает как Mac или Windows? Я смотрел, но не нашел ответов, которые не связаны с изменением сценариев или имен таблиц или обоих. Веб-сайт должен быть сгенерирован с использованием некоторой CMS, поэтому на десятки страниц есть десятки страниц и включают файлы с несколькими запросами в каждой и сотнях таблиц. Я начал пытаться реализовать этот тип решения самым умным способом, о котором я мог думать, но если я коснусь имен таблиц, то другие рабочие страницы перестают работать (я пытаюсь не допустить дальнейшего разрушения сайта).
Системная переменная (lower_case_table_names) в консоли MySQL Server в Webmin на сервере Linux, которую я прочитал, может быть изменена с 0 на 1, чтобы решить эту проблему, но Webmin не позволит мне изменить ее, потому что она "только для чтения".
Вы думаете, что это будет легко решить проблему, но пока я теряю надежду. Я надеюсь, что кто-то получит ответ, который, возможно, ускользнет от меня в данный момент.
Ответы
Ответ 1
Чувствительность к регистру MySQL по умолчанию обрабатывается файловой системой, поэтому вы нашли эту разницу:
9.2.2. Чувствительность регистра идентификатора
В MySQL базы данных соответствуют каталогам в каталоге данных. Каждая таблица в базе данных соответствует хотя бы одному файлу в каталоге базы данных (и, возможно, больше, в зависимости от механизма хранения). Следовательно, чувствительность к регистру базовой операционной системы играет роль в чувствительности к регистру базы данных и таблиц. Это означает, что имена баз данных и таблиц не чувствительны к регистру в Windows и чувствительны к регистру в большинстве разновидностей Unix. Одним из примечательных исключений является Mac OS X, который основан на Unix, но использует тип файловой системы по умолчанию (HFS +), который не чувствителен к регистру. Однако Mac OS X также поддерживает тома UFS, которые чувствительны к регистру так же, как и к любому Unix. См. Раздел 1.8.4 "Расширения MySQL для стандартного SQL".
К счастью, следующее предложение может помочь вам:
Системная переменная lower_case_table_names также влияет на то, как сервер обрабатывает чувствительность регистра идентификатора, как описано далее в этом разделе.
Рекламный ролик lower_case_table_names
:
Если установлено значение 0, имена таблиц хранятся в соответствии с указанными значениями, и сравнения чувствительны к регистру. Если установлено значение 1, имена таблиц хранятся в нижнем регистре на диске, а сравнения не чувствительны к регистру. Если установлено значение 2, имена таблиц сохраняются как заданные, но сравниваются в нижнем регистре. Этот параметр также применяется к именам баз данных и псевдонимам таблиц. Дополнительную информацию см. В разделе 9.2.2 "Чувствительность регистра идентификатора".
Вы не должны устанавливать эту переменную в 0, если вы используете MySQL в системе с именами без учета регистра (например, Windows или Mac OS X). Если вы установите эту переменную на 0 в такой системе и получите доступ к табличным именам MyISAM с использованием разных почтовых ящиков, это может привести к повреждению индекса. В Windows значение по умолчанию равно 1. В Mac OS X значение по умолчанию равно 2.
Итак, вы должны установить lower_case_table_names
в 1
в конфигурационный файл MySQL.
Ответ 2
Существует переменная сервера MySQL с тем же именем. Вероятно, вам нужно установить эту переменную при запуске системы, как описано в этой странице справки. Вам нужно будет найти расположение файла опций MySQL (my /etc/my.cnf
) для вашего экземпляра сервера БД и отредактировать/добавить этот параметр в раздел [mysqld]
.
Не забудьте перезапустить демон MySQL после этого...
Ответ 3
Отредактируйте конфигурационный файл mysql
nano /etc/mysql/my.cnf
или любой другой my.cnf
файл, который используется для настройки mysql
.
В <
[mysqld]
добавить строку
lower_case_table_names=1
Запустить
sudo service mysqld restart
Вы можете захотеть reimport свою базу данных Windows в свою базу данных linux. Предпочтительно с нуля, с добавлением операторов таблицы и вставки.
Это хорошо!
Ответ 4
Вы не можете изменить значение lower_case_table_names
во время работы mysql - его необходимо установить при запуске. Вам нужно будет отредактировать my.cnf
(возможно, в /etc
, возможно, в другом месте, не уверен). Затем перезапустите mysql, и вы должны быть хорошими.
Ответ 5
Параметр lower_case_table_names должен быть установлен как часть пользовательской группы параметров DB перед созданием экземпляра DB. Не следует изменять параметр lower_case_table_names для существующих экземпляров базы данных, потому что это может привести к несогласованности с резервными копиями резервного копирования по времени и чтениями.