Контроль формата даты и времени в MySQL dump / import - PullRequest
0 голосов
/ 21 марта 2012

Мне выдан довольно большой файл дампа mysql, который мне нужно импортировать в существующую систему. Файл прибывает из Индии, и я считаю, что их настройки локали отличаются от сервера, на который я пытаюсь импортировать. Проблема, которая у меня возникла, связана со всеми полями даты и времени. Дамп имеет их в формате DDMMMYY: HH: MM: SS (например, 21MAR12: 09: 41: 17). При импорте конвертируется в 00-00-0000 00:00:00. Я не контролирую экспорт. Я могу попросить их снова экспортировать данные, если это необходимо (меньше, чем оптимальное решение), но я чувствую, что должен сказать им, как исправить данные для меня (или я могу просто столкнуться с другой проблемой). Есть ли опция командной строки для mysqldump для управления форматом даты и времени, которую я могу сказать им использовать?

Или, что еще лучше, мне нужно найти решение, в котором я могу управлять настройками импорта - возможно, добавив значение в раздел «заголовок» файла дампа (что-то вроде SET DATETIME FORMAT = XXXXXXXXXX).

Я потратил час на поиск и чтение и не могу найти ответ, но, похоже, должен быть способ контролировать / преобразовывать эти вещи при перемещении данных (особенно между серверами с разными настройками локали) )

Также, к сведению! Я не могу изменить схему базы данных, в которую я импортирую. Таким образом, любое решение, в котором говорится, добавить поле varchar и импортировать в него, а затем преобразовать его самостоятельно, просто не будет работать для меня с точки зрения политики компании. Думаю, я мог бы создать фиктивную базу данных, импортировать ее, конвертировать, а затем снова экспортировать, но наверняка надеюсь найти более простую, чем эта! :)

Подробнее:

Запуск Ubuntu 9.04

Locale -a
C
en_US.utf8
POSIX

Mysql 5.0.75 для Ubuntu

1 Ответ

1 голос
/ 21 марта 2012

В вашем скрипте вы, вероятно, можете добавить дату str_to_date:

str_to_date('21MAR12:09:41:17', '%d%b%y:%H:%i:%S');

Например, используя ваш любимый редактор потоков:

sed -i -r 's/[0-9]{2}[A-Z]{3}[0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{2}/STR_TO_DATE("\0","%d%b%y:%H:%i:%S")/g' yourDumpFile(s)

В случае несоответствия часового пояса вы можете обновить таблицы после их импорта с помощью convert_tz: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz

...