mysqlimport Error 1292. Incorrect datetime value

Проблема

Имеется база данных с заранее подготовленной структурой. Сервер БД — mariadb-10.5.8. В результате импорта данных из CSV-дампа mailing_views_details.txt (создан при помощи mysqldump —tab)

mysqlimport -d -k -v -u root -p test mailing_views_details.txt

где
-d — очистка таблицы mailing_views_details перед ипортированием
-k — отключить проверку foreign key во время импортирования
-v — добавляет немного «болтливости» при импорте

в таблицу mailing_views_details получаю следующую ошибку:

Loading data from SERVER file: mailing_views_details.txt into mailing_views_details
mysqlimport Error 1292, Incorrect datetime value: ‘2018-03-25 03:01:08’ for column `test`.`mailing_views_details`.`created_at` at row 706660, when using table: mailing_views_details

Разбираемся

Смотрим строку 706660 и соседнюю с ней 706659 дампа mailing_views_details.txt

cat mailing_views_details.txt | head -n706660 | tail -n2

507967     15550     2018-03-25 02:59:22
450087     15559     2018-03-25 03:01:08

Значение третьего поля ‘2018-03-25 03:01:08’ недопустимо из-за перехода на летнее время (Daylight saving time (DST)) между 2 и 3 часами ночи 25 марта. Следовательно все значения времени после 3 часов ночи в любой день введения летнего времени недопустимы. Это утверждение истинно если тип поля таблицы timestamp

Решение

Их есть несколько

  1. Сменить системный часовой пояс на тот, который не использует DST
  2. Изменить тип поля таблицы с текущего timestamp на datetime
  3. Задать другое значение переменной mysql time_zone

Ясно, что первый вариант вовсе и не вариант для нашего часового пояса. Поэтому рассмотрим варианты два и три

Вариант 2

Меняем тип поля таблицы mailing_views_details на datetime

ALTER TABLE mailing_views_details MODIFY created_at datetime;

После чего дамп накатывается без ошибок

Вариант 3

Меняем переменную time_zone с текущего значения SYSTEM на +2:00

SET time_zone = '+2:00';
SELECT @@time_zone;

@@time_zone
 +02:00

И накатываем дамп. Чтобы всякий раз после перезагрузки mysql не изменять значение time_zone на нужное, необходимо в файле my.cnf добавить следующее:

default-time-zone = '+2:00'

И вишенка на торте!

Такая ошибка импортирования наблюдается только в случае если дамп был сделан с использованием mysqldump —tab в CSV-файл. Если же дампить без опции —tab, то при заливке подобной ошибки не возникает

345