解决:MySQL中NULL和NOT NULL的混乱

解决:MySQL中NULL和NOT NULL的混乱

本来,指定NOT NULL的意思是表中所有行的此属性必须有一个值。

如果没有指定或者指定为NULL,该列可以为空(NULL)。

但是,在MySQL中,你用NOT NULL,高版本的会自己解析默认值的:

  • INT -> 0;
  • CHAR -> (空值);
  • DATATIME -> ‘0000-00-00 00:00:00’ 等等。

说白了,MySQL中的NOT NULL已经不是约束条件“表中所有行的此属性必须有一个值”了。并且如果字段是“字符型”,在DEFAULT情况下和NULL基本上是一样的。

注意:我在实际操作中发现,“表1″的“字段” password 是“字符型”,未指定(也就是指定为NULL);“字段” address 是“字符型”,指定为NOT NULL,在phpmyadmin中的显示如下:

表1

customerid name password address city
1 Julie Smith NULL Airport West

在 MySQL 中,为一个 NOT NULL 字段设置了一个 NULL 值,如果非STRICK模式,它并不会出错;但在SQL中却会出错。

MySQL 会自动将 NULL值转化为该字段的默认值, 那怕是你在表定义时没有明确地为该字段设置默认值,一般来说MySQL还是会自动为你添加默认值的,比如为一个 NOT NULL 的整型赋 NULL 值,结果是 0。

设为not null,不赋值的话字符串会为(空值),int会为0,不会出现错误。也就是说,设为not null,空值仍可以入库。

如果设为NULL,默认值为(空值)。

发表评论

zh_CN简体中文