MariaDB:在触发器中更改 ENUM 会引发异常

时间:2021-06-07 13:20:56

标签: mysql enums triggers mariadb

假设,我有下表:

CREATE TABLE `test` (
    `Id` INT(11) NOT NULL AUTO_INCREMENT,
    `Value` ENUM('VAL1','VAL2') NOT NULL,
    PRIMARY KEY (`Id`) USING BTREE
) ENGINE=InnoDB;

和以下触发器:

DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `test` FOR EACH ROW BEGIN

SET NEW.`Value` := 'VAL1';

END $$
DELIMITER ;

现在我可以插入一些行,但是如果我使用无效的枚举类型,我会收到一个错误:

INSERT INTO test VALUES (NULL, 'VAL2'); // Statement ok, "Value" is set to 'VAL1'
INSERT INTO test VALUES (NULL, 'VAL5'); // Exception 'SQL Fehler (1265): Data truncated for column 'Value' at row 1'

似乎在 INSERT-触发器触发之前检查了有效的 ENUM 值。 这是为什么?如何建立触发器将无效的 ENUM 更改为有效的 ENUM?

我看到了很多例子,这些行为显然不会发生。会不会是配置错误?我们使用 MariaDB 10.5.9。

1 个答案:

答案 0 :(得分:0)

Akina(见第一条评论)是对的,即使在触发器中也不可能更改未知的 ENUM 值。
我的解决方案是在 ENUM 列表中包含所有可能的值。所以触发器可以完成它的工作并将“禁止”值更改为允许的值。唯一需要注意的是,现在有一些 ENUM 值没有在数据中使用。