Подтвердить что ты не робот

Имена таблиц MySQL в нижнем регистре в именах верхнего уровня Windows в Unix

У меня есть проблема, при которой на моем рабочем сервере работает Unix, а мой dev-сервер запускает MS Windows. Проблема в том, что Windows не чувствительна к регистру, а Unix. Поэтому моя таблица, установленная на производственном сервере, использует имена таблиц верхнего уровня, т.е. "Клиенты", а в Windows имена таблиц - "нижние" клиенты.

Все это прекрасно, пока вам не нужно будет получать данные из одного окна в другое, а ваш экспорт SQL говорит о вставке в "клиентов" в нижнем регистре и в предварительном порядке "клиенты Unkown table". Поскольку производственный сервер в настоящее время находится в режиме общего хостинга, я не могу изменить настройки и установить ключ, который игнорирует случай.

Итак, мой вопрос: есть ли способ заставить Windows преобразовать таблицы в правильный случай или есть какой-то параметр, который я могу включить в файл экспорта SQL, чтобы я мог загружать данные без этой проблемы.

Спасибо

ОБНОВЛЕНИЕ

Вот что я обнаружил для кого-то другого, имеющего эту проблему.

Если вы уже настроили свои таблицы под управлением MySQL в Windows, добавьте lower_case_table_names = 2 в ваш файл my.cnf или my.ini не изменят случай ваших таблиц автоматически, даже если они были изначально созданы с использованием заглавных или смешанных имен.

CREATE TABLE "MyTable" создаст новую таблицу "mytable" не "MyTable", даже если в файле my.cnf указано значение lower_case_table_names = 2.

Чтобы обойти эту проблему, используйте этот метод

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

Это единственный способ, которым это будет работать. Надеюсь, это поможет кому-то.

4b9b3361

Ответ 1

Взято из dev.mysql.com:

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

  • Используйте lower_case_table_names = 1 для всех систем. Основным недостатком этого является то, что когда вы используете SHOW TABLES или SHOW DATABASES, вы не видите имена в их исходном письме.
  • Используйте lower_case_table_names = 0 в Unix и lower_case_table_names = 2 в Windows. Это сохраняет регистр букв имен баз данных и таблиц. Недостатком этого является то, что вы должны убедиться, что ваши утверждения всегда ссылаются на ваши базы данных и имена таблиц с правильной буквой в Windows. Если вы передаете свои заявления в Unix, где регистр букв является значительным, они не работают, если неправильный буквенный код.

Исключение: если вы используете таблицы InnoDB и пытаетесь избежать этих проблем с передачей данных, вы должны установить lower_case_table_names на 1 на всех платформах, чтобы заставить имена преобразовываться в нижний регистр.

Если вы планируете установить системную переменную lower_case_table_names в 1 в Unix, вы должны сначала преобразовать старые имена базы данных и таблиц в нижний регистр, прежде чем останавливать mysqld и перезапустить его с новой настройкой переменной.

Ответ 2

Универсальная руководящая философия Windows по отношению к случаю - это регистр без учета регистра, хранимый. Это означает, что Windows никогда не собирается отказываться от вашего дела, поэтому немного загадочно, почему ваши таблицы в Windows имеют нижний регистр.

Извините, если это глупый вопрос, но попробовали переименовать таблицы на машине Windows, чтобы у них был правильный шаблон case?