我原来用的是mysql4.1,现在换成mysql 5.0.22了,一个表A,有一个字段hof_Check_in_hour,类型为time,null值为“是”,默认NULL,以前往数据库里写值的时候,该字段是可以为空值的,现在不行了,返回错误信息如下:MySQL 返回:文档
#1292 - Incorrect time value: '' for column 'hof_Check_in_hour' at row 1 
看来是无效的值(换成格式如00:00:00之类的规定格式就可以),我就比较纳闷,难道是mysql5.0比较严格???望诸君指教,谢谢。

解决方案 »

  1.   

    TIME默认的是0000-00-00,如果你规定NOT NULL的话。
      

  2.   

    我知道time默认的是00:00:00的啊......,我现在设置为NULL,希望该字段能插入空值,以前mysql4.1可以,现在mysql5.0.22不行了,不知何故。此表A所在数据库:(以phpmyadmin工具显示为例)
    MySQL 字符集:  UTF-8 Unicode (utf8)
    MySQL 连接校对:utf8_general_ci
    Language:中文 - Chinese simplified
      

  3.   

    看一下你的sql有没有问题,''不等于null的。''是非法时间格式,不是空值,null是空值。你的库可以接受null,但是不能接受''作为时间。
    另外,看一下该字段的默认值,可以为其设置一个默认值。
      

  4.   

    我插入值为null也不行啊,表类型为MyISAM之前可以,程序运行没问题。我又新建了表aaa,表类型为InnoDB,可以插入空值。而且我发现有int类型的字段,插入空值也不行了,这是因为mysql5.0与4.0的区别吗???这可麻烦大了,望指点迷津!!不胜感激!!!
      

  5.   

    刚又新建表bbb,表类型为MyISAM,还是可以插入空值!!
    而我从mysql4.1移植过来的数据(*.sql)就不行!不知道为什么呢???
      

  6.   

    能不能把你的ddl贴出来,看看
      

  7.   

    可以是null,但是不能是空字符的
      

  8.   

    我知道原因:
    是因为两个数据库的安装配置不一样。如果MySQL用DONT_USE_DEFAULT_FIELDS选项配置,INSERT语句产生一个错误,
    除非你明确对需要一个非NULL值的所有列指定值。见4.7.3 典型configure选项。
    你可以设置MySQL对于非NULL的列不使用DEFAULT列值(即,不允许列是NULL)。这导致INSERT语句产生一个错误,
    除非你明确地为所有要求非NULL值的列指定值。为了禁止使用缺省值,这样运行configure:shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS  ./configure
    你可以重新安装mysql或者设定一个默认值