触发无法将'm / d / YYY'转换为DATE类型。包括REPRO

时间:2018-01-13 22:45:12

标签: mysql

我将从文件批量插入数据,我希望能够使用MySQL而不是后端语言转换数据类型。这就是我正在做的事情,但它不起作用,我无法理解。谢谢!

create table t1 (TEST_DATE DATE);

DELIMITER |
create trigger t1FixDate BEFORE INSERT ON t1
    FOR EACH ROW BEGIN
        SET NEW.TEST_DATE=STR_TO_DATE(NEW.TEST_DATE, '%c/%e/%Y');
END; |
DELIMITER ;

insert into t1 VALUES ('9/7/2016');
//Error Code: 1292. Incorrect date value: '9/7/2016' for column 'TEST_DATE' at row 1

编辑:以下SQL工作原理。我真的很难过这个。是否在类型检查之前完成了触发器?

create table t2 (TEST_DATE DATE);
insert into t2 VALUES (STR_TO_DATE('9/7/2016', '%c/%e/%Y'));

1 个答案:

答案 0 :(得分:0)

根据manual

  

关键字BEFORE表示触发操作时间。在这种情况下,触发器在每行插入表格

之前激活

因此,触发器适用于行,已经创建,但未添加到表中。这意味着,您的字符串已分配给数据类型为Date的列,此操作失败(已分配null)。 在调用该触发器之后,它处理null值。