Я собираюсь вставлять данные из файла, и я хотел бы иметь возможность преобразовывать тип данных с помощью 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
edit: работает ниже SQL. Я действительно в тупике. Выполняются триггеры перед проверкой типов?
create table t2 (TEST_DATE DATE);
insert into t2 VALUES (STR_TO_DATE('9/7/2016', '%c/%e/%Y'));
Согласно руководству,
Ключевое слово BEFORE указывает время срабатывания триггера. В этом случае триггер активируется перед каждой строкой, вставленной в таблицу
Таким образом, триггер работает со строкой, которая уже была создана, но не добавлена в таблицу. Это означает, что ваша строка была назначена столбцу с типом данных Date, эта операция не удалась (null был назначен). И после этого триггер был вызван, поэтому он имеет дело с нулевым значением.