Преобразование таблиц с учетом случайных данных MySQL

У меня есть PHP-код, который был написан для обращения к нашим таблицам MySQL в смешанном случае. Например, xar_intakeformgenerator_ChangeLog .

Наш код также работает на окнах, и, прежде чем мы знали, что лучше, мы импортировали несколько баз данных на сервер Windows. Это привело к тому, что Windows MySQL изменила все имена таблиц на нижний регистр. ( xar_intakeformgenerator_changelog ). Теперь мы знаем, как предотвратить это от новых баз данных. ( Set lower_case_table_names ) И код отлично работает на серверах Windows, потому что MySQL просто не заботится о случае таблиц в Windows.

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

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

Я не одинок по поводу любого варианта. Кто-нибудь знает изобретательный способ справиться с этим?

ОК. Я нашел ответ.

На сервере Linux мне нужно было запустить следующее, чтобы изменить все имена таблиц в моих базах данных, сгенерированных Linux, в нижнем регистре:

  1. Как создать SQL-скрипт, который переименовывает все таблицы в схеме в нижний регистр:

     select concat('rename table ', table_name, ' to ' , lower(table_name) , ';') from information_schema.tables where table_schema = 'your_schema_name'; 
  2. Переименовали базы данных в phpmyadmin в phpmyadmin .

  3. Изменено my.cnf на сервере Linux для использования lower_case_table_names=1

  4. Перезапущенный mysql.

После этого мой код будет работать с именами нижних регистров. Таким образом, я смог импортировать Windows и иметь одну и ту же базу кода для обоих.

Если я правильно помню меня была такая же проблема некоторое время назад), но я перестал работать над этим проектом, прежде чем мы решили, какое решение принять …) , есть опция конфигурации, в которой говорится, как следует использовать имена таблиц (case- чувствительный или нечувствительный к регистру).

Вот что я нашел: Чувствительность регистра идентификатора

Цитирование этой страницы:

Если вы используете MySQL только на одной платформе, вам обычно не нужно менять значение переменной lower_case_table_names из значения по умолчанию. Однако вы можете столкнуться с трудностями, если хотите перенести таблицы между платформами, которые отличаются чувствительностью к регистру файловой системы. Например, в Unix вы можете иметь две разные таблицы с именем my_table и MY_TABLE , но в Windows эти два имени считаются идентичными. Чтобы избежать проблем передачи данных, возникающих из буквенного обозначения имен базы данных или таблиц, у вас есть два варианта:

  • Используйте lower_case_table_names=1 для всех систем. Основным недостатком этого является то, что когда вы используете SHOW TABLES или SHOW DATABASES , вы не видите имена в их исходном буклете.

    • Используйте lower_case_table_names=0 в Unix и lower_case_table_names=2 в Windows. Это сохраняет регистр букв имен баз данных и таблиц.

(Больше я не копировал-вставляю, так что читать эту страницу может быть хорошей идеей ;-))

Надеюсь, это поможет …

lower_case_table_names

Для Windows по умолчанию используется «сделать все в нижнем регистре» (1). Установите его на 2: «Нечувствительный к регистру, но сохраните случай как есть».

Эти изменения входят в ваш my.cnf