2

我正在尝试创建一个触发器,将输入日期更改为 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 ;
4

2 回答 2

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')));
于 2013-04-03T15:00:44.557 回答
1

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

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

或者

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

于 2013-04-03T15:12:48.923 回答