Дата выпуска в MYSQLIMPORT за 9999 год - PullRequest
0 голосов
/ 12 марта 2020

Я загружаю данные в MySQL с помощью mysqlimport. И скрипт выглядит так:

mysqlimport -u $USER -p$PASSWORD -h $HOST -P $PORT $INSTANCE  --fields-terminated-by '\t' --local -v $STG_DIR"/"$MYSQL_TABLE

При загрузке данных в MySQL, за исключением столбца отметки времени, в котором 9999-12-31 00:01:00.000000 оставшиеся столбцы загружаются нормально. Для этого конкретного столбца он просто выдает предупреждение и загружается с помощью 0000-00-00 00:00:00.000000.

. Я также пытался загрузить с помощью таких инструментов, как mysqlyog и MySQL workbench, но я получаю ту же проблему.

Ниже приведен пример:

Данные в моем Unix файле:

3       2007-04-27 13:56:49.805695      2007-04-27 16:00:02.571438 
23659   2006-02-12 00:01:00.0           9999-12-31 00:01:00.0 

После загрузки в MySQL с использованием приведенного выше сценария:

3       2006-02-12 00:01:00 2007-04-27 13:56:50 
23659   2006-02-12 00:01:00 0000-00-00 00:00:00

Столбцы выдачи 3-й: 0000-00-00 00:00:00

Когда я обновляю вручную для того же столбца с 9999-12-31 00:01:000, также я получаю тот же результат:

0000-00-00 00:00:00

Но когда я выполнял ручное обновление для того же столбец с 2000-12-31 00:01:00 Я получаю правильное значение, которое я обновил как 2000-12-31 00:01:00

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Спасибо, Нико ... Да, вы правы, TIMESTAMP имеет ограничение, поэтому я изменил на DATETIME.

TIMESTAMP: Он используется для значений, которые содержат как дату, так и время. У TIMESTAMP есть диапазон от 1970-01-01 00:00:01 UT C до 2038-01-19 03:14:07 UT C.

DATETIME: используется для значений, которые содержат как дату, так и время. MySQL извлекает и отображает значения DATETIME в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. Поддерживаемый диапазон: 1000-01-01 от 00:00:00 до 9999-12-31 23:59:59

Еще раз спасибо.

0 голосов
/ 12 марта 2020

Какой тип этого столбца?

Если это TIMESTAMP, он не сможет принимать даты после 2038-01-19 03:14:07.

В этом случае вместо этого вы должны использовать тип DATETIME.


MySql manual: Типы DATE, DATETIME и TIMESTAMP

TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19
03:14:07' UTC
For DATETIME, the supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59' 

Проблема 2038 года: Википедия

Проблема 2038 года вызвана недостаточной емкостью выбранного типа данных (подписанный 32-разрядное целое число)

Максимальное значение 32-разрядного целого числа со знаком равно 2147483647 (секунда после первого января 1970 г.)

Когда вы преобразуете его во время даты, вы получите 2038-01-19 03:14:07

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...