MySQL触发器 - 插入前更新数据

时间:2013-04-03 14:39:45

标签: mysql triggers

我正在尝试创建一个触发器,将输入日期更改为unix时间戳。 当我向表插入一个值时,插入的值为NULL

CREATE TRIGGER `updateDate` BEFORE INSERT ON  `tl_calendar_events` 
FOR EACH
ROW SET NEW.startDate = UNIX_TIMESTAMP(STR_TO_DATE(NEW.startDate, '%d.%m.%Y'))

'startDate'的输入值类似于01.11.2013

表格定义:

CREATE TABLE IF NOT EXISTS `tl_calendar_events` (
...
`startDate` int(10) unsigned DEFAULT NULL,
...
PRIMARY KEY (`id`),
KEY `pid` (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=66 ;

2 个答案:

答案 0 :(得分:1)

您无法将字符串插入INT列。看起来STRICT服务器模式已关闭,并且插入了默认值(... startTime int(10) unsigned DEFAULT NULL ...)。

唯一的方法是在插入这些值时更改这些值,例如 -

INSERT INTO tl_calendar_events(startDate)
  VALUES (UNIX_TIMESTAMP(STR_TO_DATE('01.11.2013', '%d.%m.%Y')));

答案 1 :(得分:0)

startDate列的数据类型更改为varchar,然后您的上述查询将起作用。使用

`startDate` VARCHAR(10) NULL DEFAULT NULL in your table creation query

OR

您可以将数据类型更改为DATEDATETIME并在程序中转换为unix时间,在这种情况下不需要该触发器