mysql - 使用正则表达式触发验证不适用于换行符

标签 mysql

我正在尝试使用 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/

相关文章:

mysql - 多个插入和选择到单个查询中

mysql - 使用 spring thymeleaf MVC 进行表单搜索?

mysql - 如何延迟加载或急切加载关联表的总和?

php - 表未使用 Ajax 和 Mysql 更新

mysql - 如何在关系数据库中存储对象?

c# - 即使添加用户后,MySQL (MariaDB) 身份验证也失败 'user' @'localhost'

mysql - 从三个字段中识别一个字段,其中字段的值等于 `MySQL`中的特定数字

mysql - Drupal 7 db_select 嵌套选择查询

php - 在第二个查询和嵌套结果中使用第一个 mysqli 查询的数据

mysql - mysqli::query的奇怪行为