这是对这个问题的跟进。原来我正在使用的驱动程序(无法更改)与时间戳值不兼容。可以说,我必须将数据作为字符串类型加载到我的 MySQL 8.0 数据库中。我用来读取 PLC 并写入数据库的软件中没有本机功能,可以将字符串更改为时间戳。
我现在想弄清楚的是如何设置一个触发器,将字符串转换为 insert 上的时间戳。这个想法是软件的帮助热线向我提出的,但如果你有更好的想法,我也愿意接受。到目前为止,我有两列:一列是我“接收”类型为 VARCHAR(30) 的字符串,另一列是我用触发器写入时间戳值。
这种设置对我来说感觉非常愚蠢,因为我最终得到了 2 列具有相同数据但格式不同的列,其中一个完全没用。
到目前为止,我的桌子看起来像:
CREATE TABLE `test` (
`id` mediumint NOT NULL AUTO_INCREMENT,
`Date_VARCHAR` varchar(30) DEFAULT NULL,
`Date_TIMESTAMP` timestamp(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=52383 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
触发器是:
DELIMITER $$
CREATE DEFINER = CURRENT_USER TRIGGER `db_test`.`test_BEFORE_INSERT`
BEFORE INSERT ON `db_test`.`test` FOR EACH ROW
BEGIN
SET NEW.Date_TIMESTAMP = NEW.Date_VARCHAR ;
END$$
DELIMITER ;
有没有更好的方法来避免两次拥有相同的数据?我想制作一个触发器,它只转换数据并将其全部写入一列,而不是我想出的设置。
这里快速浏览一下我正在做的事情。我已经插入了一些随机值,但实际上都是通过 KEPServerEx 的数据记录器插件完成的。