小编典典

MySQL列设置为NOT NULL但仍允许NULL值

sql

我将每个列都设置为,NOT NULL但是由于某种原因,我仍然能够NULL在每个列中添加一个值。这是我的表信息(创建语法):

CREATE TABLE `addresses` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `address` varchar(100) NOT NULL,
    `city` varchar(100) NOT NULL,
    `state` varchar(4) NOT NULL,
    `zip` varchar(30) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4545 DEFAULT CHARSET=utf8;

这是一个有效的示例INSERT

INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES ('', '', '', '');

有什么想法为什么会这样?


阅读 293

收藏
2021-03-23

共1个答案

小编典典

您要插入空字符串,而空字符串不是NULL,要检查NULL错误,请执行以下操作:

INSERT INTO `addresses` (`street`, `city`, `state`, `zip`) VALUES (NULL, NULL, NULL, NULL);

你会看到错误。该NOT NULL只对那些不值检查NULL

为了防止空字符串,您必须使用触发器,或者NULL在执行INSERT查询之前对服务器端编程语言进行检查以将空字符串转换为。的示例触发器INSERT可能类似于:(这只是一个示例)

CREATE TRIGGER avoid_empty
    BEFORE INSERT ON addresses
        FOR EACH ROW
        BEGIN
        IF street = '' THEN SET street = NULL END IF;
END;
2021-03-23