2015-07-07 2 views
0

У меня таблица mysql со столбцом date от TIMESTAMP Тип. Я пытаюсь загрузить большой объем данных, используя LOAD DATA LOCAL INFILE. Все работает, за исключением того, что столбцы даты не могут быть заполнены пользовательской временной отметкой unix, созданной из строки. Вот SQL-запрос:Поле timestamp MySQL не принимает unix_timestamp() result

LOAD DATA LOCAL INFILE '/path/to/file.csv' INTO TABLE names FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (@nm) set `name`[email protected], `gender`='female', `date`=UNIX_TIMESTAMP(STR_TO_DATE('2015-06-07 09:21:44', '%Y-%m-%d %H:%i:%s')); 

судимый Кроме этого:

LOAD DATA LOCAL INFILE '/path/to/file.csv' INTO TABLE names FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (@nm) set `name`[email protected], `gender`='female', `date`=UNIX_TIMESTAMP('2015-06-07 09:21:44'); 

Проблема заключается в том, что поле даты заполняется 0000-00-00 00:00:00.

Есть ли у кого-нибудь идеи, в чем проблема?

+1

У MySQL нет типа данных 'UNIX_TIMESTAMP', вы имеете в виду' TIMESTAMP'? – Vatev

+0

Да, вы правы! Сожалею! – Zoli

+0

Исправлено, спасибо за упоминание! – Zoli

ответ

1

Попробуйте удалить функцию UNIX_TIMESTAMP и STR_TO_DATE.

TIMESTAMP поля работают с форматом yyyy-mm-dd hh:mm:ss (такие же как DATETIME).

1

Если date является типом данных TIMESTAMP, просто сделать

`date` = '2015-06-07 09:21:44' 

Нет необходимости для канители с STR_TO_DATE и UNIX_TIMESTAMP. MySQL выполняет неявное преобразование строкового литерала (в этом формате) в DATE, DATETIME, TIMESTAMP тип данных, когда в контексте, который ожидает один из этих типов данных.

Чтобы вернуть целочисленное значение, вы должны использовать функцию UNIX_TIMESTAMP, если вы сохранили значение в числовом столбце, а не TIMESTAMP.


+0

Ваш ответ правильный, спасибо за помощь. Тем не менее, комментарий @Vatev пришел первым, я должен дать ему признание. В любом случае, спасибо за помощь! – Zoli