MySQL char接受未修复的值

时间:2018-03-03 12:02:32

标签: php mysql sql database constraints

我仍然无法弄清楚为什么会这样。下面是我的SQL语法..

create table usertbl{
    id int auto_increment,
    name varchar(30) not null,
    cupon_code char(10) not null,
    primary key(id)
}

因此,根据此表,cupon_code字段具有固定长度,但是当我将数据插入到没有固定值的字段(如we3434)时,它会被接受。

如果值小于10或大于10,我希望表拒绝cupon_code字段的值。它总是必须用10个字符固定。所以我能知道这是为什么吗?我该如何避免这个问题?

2 个答案:

答案 0 :(得分:1)

您无法使用mysql在MIN上设置约束,而CHAR(x)仅强制使用最大长度。

使用MySQL VARCHAR like Data type with MIN and MAX character lengths可以进行以下触发:

DELIMITER $$

CREATE TRIGGER `tgi_usertbl_cupon_code_length` BEFORE INSERT ON `usertbl` 
FOR EACH ROW
BEGIN

    IF LENGTH(NEW.cupon_code) <> 10
    THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'ERROR - Invalid length of cupon_code';
    END IF;

END $$
DELIMITER ;

答案 1 :(得分:0)

您可以在插入数据时使用where where条件,例如

Insert into tablename (column name) values (values) where len(columnname) <= 10

即使你得到答案,也许你可以得到一些想法