我正在尝试使用 mysql-trigger 验证插入。 col1 中的插入应该只是数字。首先将 col1 定义为整数不是一个选项。但是,如果末尾有换行符,验证就会失败。
这是表格
CREATE TABLE testTable(col1 varchar(20), col2 int);
这里是触发验证器
DELIMITER $$
CREATE TRIGGER check_numeric BEFORE INSERT ON testTable
FOR EACH ROW
BEGIN
IF (NEW.col1 REGEXP '^[0-9]+$') = 0 THEN
SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT='non-numerical';
END IF;
END $$
如果我尝试在末尾插入一个包含换行符的字符串,则会通过验证,但我认为不应这样做,因为换行符不是数字。
INSERT INTO testTable values('323423\n', 12);
有人知道我在这里缺少什么吗?
最佳答案
另一个选项是搜索非数字的任何内容,如果任何字符不是数字,则返回 1:REGEXP '[^[:digit:]]'
因此 IF
子句将是
IF (NEW.col1 REGEXP '[^[:digit:]]') = 1 THEN ...
当然,如果你不想使用字符类,你可以写 [^0-9]
而不是 [:digit:]
关于mysql - 使用正则表达式触发验证不适用于换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54379629/