修改触发器之前丢失的日期时间值
正在创建一个以 MySQL 作为数据库的身份验证服务器。 我正在使用一个表来存储刷新令牌,它看起来像这样:
CREATE TABLE IF NOT EXISTS REFRESH_TOKEN (
TOKEN VARCHAR(512) NOT NULL,
EXPIRATION DATETIME
) ENGINE=INNODB;
为了确保正确,我使用以下触发器:DATETIME
DROP TRIGGER IF EXISTS TG_RT_EXP;
DELIMITER //
CREATE TRIGGER TG_RT_EXP BEFORE INSERT ON REFRESH_TOKEN
FOR EACH ROW
BEGIN
SET NEW.EXPIRATION = FROM_UNIXTIME(NEW.EXPIRATION);
END;//
DELIMITER ;
为了测试两者,下面是 used 语句(从 jwt.io 中提取的值)
INSERT INTO REFRESH_TOKEN
(TOKEN, EXPIRATION)
VALUES (
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c',
1796239022
);
INSERT 发生后,ID 为 1265 的警告指出数据被截断,并且每个新行都有值,而不是相应的转换。我删除了触发器,得到的值为 ,所以我猜测它与 INSERT 值格式有关。这与触发器、INSERT 值格式、列数据类型有关还是其他原因?1969-12-31 16:00:000000-00-00 00:00:00
编辑:如果尝试执行
INSERT INTO REFRESH_TOKEN
(TOKEN, EXPIRATION)
VALUES (
'eyJhbGciOiJIUzI...',
FROM_UNIXTIME(1796239022)
);
该值已正确插入且未显示警告,为什么不能将其转换为触发器?