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

Я работаю над базой данных MySQL в Windows.

Я должен переместить его в среду Linux. База данных MySQL содержит множество таблиц и хранимых процедур, которые РЕГИСТРОЗАВИСИМЫ.

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

У меня нет доступа к конфигурации MySQL в среде Linux, поэтому я не могу изменить настройки MySQL на режим без учета регистра.

Есть ли способ заставить MySQL (v5.x) использовать имена таблиц с учетом регистра в окнах?


person Ehsan Khodarahmi    schedule 06.06.2011    source источник
comment
Удивительно, но обновление с MySQL 5.1 до MySQL 5.5 решило мою проблему! Теперь я могу использовать имя таблицы с учетом регистра в среде Windows, хотя по-прежнему невозможно создать две таблицы с одинаковым именем, которые отличаются только регистром букв (например, table_1 и TABLE_1), и, конечно, я никогда не хочу этого делать!   -  person Ehsan Khodarahmi    schedule 10.07.2011


Ответы (6)


Прочитайте все это: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

Затем добавьте эту системную переменную в раздел сервера [mysqld] из my.ini и перезапустите mysql:

/my.ini: lower_case_table_names=2

person ATorras    schedule 28.03.2012
comment
Имейте в виду, что это работает только в файловых системах без учета регистра, например. Mac и Windows, но НЕ Linux, потому что fs по умолчанию в Linux чувствительна к регистру (однако, если вы создадите fs без учета регистра в Linux и сохраните там данные mysql, тогда это работает, но это не так просто, хотя возможно с помощь гугла). Удалил мой голос. - person Stefan Steiger; 14.11.2013
comment
Режим 2 в Windows не фактически сравнивает имена с учетом регистра, у вас не может быть ThisTable и thistable. - person simontemplar; 07.03.2014
comment
Спасибо, что решили мою проблему с именами таблиц SS [SilverStripe] и чувствительностью к регистру. - person user956584; 09.03.2014
comment
Нет эффекта для InnoDB в Windows, черт с вами, MySQL! - person Salman von Abbas; 21.03.2014
comment
От имени Патрика: в системах Unix вы должны использовать /my.ini: lower_case_table_names=0 - person yizzlez; 29.03.2014
comment
Хм, я на OSX, и это установлено на 2 (по умолчанию?), но все же я не получаю ошибок при использовании неправильного регистра в именах таблиц. Что я мог упустить? Я проверил значение через show variables; - person Joost; 08.03.2015
comment
@Joost Из руководств: это работает только в файловых системах, которые не чувствительны к регистру! Имена таблиц InnoDB хранятся в нижнем регистре, как и для lower_case_table_names=1. - person ATorras; 10.03.2015
comment
Какой раздел в файле? [mysqld] или [клиент]? - person Pete Alvin; 27.05.2016

Взгляните на эту статью — http://dev.mysql.com/doc/refman/5.1/en/identifier-case-sensitivity.html

Режим 2 позволяет хранить таблицы с указанным регистром букв, но в любом случае сравнение имен не будет учитывать регистр, и вы не сможете хранить table1 и Table1 одновременно.

person Devart    schedule 06.06.2011

В Windows поместите lower_case_table_names=2 в конец файла C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

person Evgeny Chashnik    schedule 09.06.2016
comment
mariadb.com/kb/en/mariadb/identifier-case-sensitivity Примечание: mysql и mariadb в основном одинаковы, поэтому это должно применяться It is thus possible to make Unix-based systems behave like Windows and ignore case-sensitivity, but the reverse is not true, as the underlying Windows filesystem can not support this. - person Ryan Lee; 02.07.2016

К сожалению, невозможно заставить MySQL вести себя на Windows на 100% так же, как в Linux. Что вы можете сделать, так это запустить минимальную виртуальную машину на Virtual Box или проигрыватель VMware с Под ключ — MySQL Appliance.

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

person Augusto    schedule 06.06.2011

я добавляю эту строку, и она решает другую проблему

нижний_case_table_names=1

в /etc/my.cnf

вы можете увидеть, как установить переменную mysql "lower_case_table_names" на этой странице: https://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_lower_case_table_names

person Hatem Badawi    schedule 20.06.2015

Добавьте это свойство в lower_case_table_names=2 в my.ini.

person Kris    schedule 07.12.2015