Mysql 使用正则表达式的触发器验证不适用于换行符
我正在尝试使用mysql触发器验证插入。col1中的插入项应仅为数字。首先不能将col1定义为整数。但是,如果末尾有换行符,验证将失败 这是桌子Mysql 使用正则表达式的触发器验证不适用于换行符,mysql,Mysql,我正在尝试使用mysql触发器验证插入。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
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);
有人知道我遗漏了什么吗?你能用这种方法检查一下吗
IF NEW.col1 REGEXP '^[0-9]+$' AND NEW.col1 NOT REGEXP '\n' THEN
结果:1234
另一个选项是搜索任何非数字的内容,如果任何字符不是数字,则返回1:
REGEXP'[^[:digit:]'
因此,IF
子句是
IF (NEW.col1 REGEXP '[^[:digit:]]') = 1 THEN ...
当然,如果您不想在MySQL 5.7.24上使用字符类,您可以编写
[^0-9]
而不是[:digit:][/code>,至少如果我对该regexp检查“1234\n”,我会得到0的结果。我没有将其作为触发器进行检查,但我认为它会以同样的方式工作。看起来很奇怪。令人惊讶的是,这对我来说很有效。尽管如此,我并不完全理解为什么相反的方法会失败。非常感谢。
IF (NEW.col1 REGEXP '[^[:digit:]]') = 1 THEN ...