既然你已经设置了NOT NULL,你还得有个default的值啊。否则还是有mysql自己的默认值的。

解决方案 »

  1.   

    NOT NULL并不是当你在插入空值或无值的时候报错,而是自动给你补上一个空值
      

  2.   

    记得以前考C的时候考过这道题目(名词解释:空值;NULL),当时没在意,没想到过了N年后还是得弄懂他...
      

  3.   


    晕,这个我来说一下吧。not null 和 null 是标记该字段是否允许插入空值(这里的空值是一个特殊字符 \0 )。 not null 是不允许插入这个值,那么你空着这个字段的时候,这个字段里就是空的,没有任何字符。
    如果你设置为null,那么他的默认值就是null,如果你填入null或者空着,那么他会插入一个特殊字符 \0 。
    仅此而已,允许插入null是为了方便做判定,但是却影响索引,查询结果也可能产生输出。因此,在大多数应用中,都默认为not null。如果没有需要也最好都设置为not null~
      

  4.   

    not null 低版本的mysql不插值好像会报错的 ... 现在又不会了 反正没值的话就自动插个空值解决的办法也很简单 在插入的时候判断插入字段是不是有值 比如 if $_POST["name"]==NULL { echo "没有输入数值"; } 这样就好了
      

  5.   

    一些根本不懂空值和NULL有什么区别,误导初学者。所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS关键字, Mysql3.23.0或以后支持用<=>用来比较两个NULL值是否相等, 即 select * from table where id <=> NULL.为什么会出现NULL?这是来源于数据库的左右连接,不是凭空想出来的。比如:
    A(ID, Name), B(ID, Address)
    1, Name1     1, Shanghai
    2, Name2     3, Beijing当A左连接B则得到: 
    1, Name1, Shanghai
    2, Name2, NULL当A右连接B则得到: 
    1, Name1, Shanghai
    3, NULL, Beijing数据库的字段ID设为NOT NULL, 仅仅说明该字段不能为NULL, 也就是说只有在
    INSERT INTO table(ID) VALUES(NULL);
    这种情况下数据库会报错,而
    INSERT INTO table(ID) VALUES('');
    这不能说明是NULL, 数据库系统会根据ID设的缺省值填充,或者如果是自增字段就自动加一
    等缺省操作。