MySQL char接受未修复的值

问题描述 投票:1回答:2

我仍然无法弄清楚为什么会这样。下面是我的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个字符固定。所以我能知道这是为什么吗?我该如何避免这个问题?

php mysql sql database constraints
2个回答
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 ;

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.