有一表
CREATE TABLE a(
  id bigint(18) DEFAULT NULL,
  user_name varchar(20)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;insert into a(id,user_name) values('','abc');
结果从a表中取出数据时,id的栏位值为0?我本是希望这个栏位中不插数据,它将空值自动转成0了,有没有什么办法不转换成0么?除掉insert into a(id,user_name) values(null,'abc');这种方式

解决方案 »

  1.   

    insert into a(id,user_name) values('','abc'); ---------------
    因为你的''值插入到bigint列,已经是个超出范围的值情况,而在非严格SQL模式下,你一样可以insert进表,因为“如果向列内插入不合适的或超出范围的值,MySQL将该列设定为'最好的可能的值',而不是报告错误。对于数字值,为0、可能的最小值或最大值。”,所以,就出现了你上面记录填0的情况。除掉insert into a(id,user_name) values(null,'abc');这种方式
    还可以不对列id插入值:insert into a(user_name) values('abc');
      

  2.   

    我认为应该有类似于sql_mode的这种控制方式的。只是我还没找到而已。oracle中就可以对number数据插入‘’。也许是因为oracle对''和null值都认为是null值的缘故
      

  3.   

    我认为应该有类似于sql_mode的这种控制方式的。只是我还没找到而已。 mysql> SELECT @@GLOBAL.sql_mode;
    +----------------------------------------------------------------+
    | @@GLOBAL.sql_mode                                              |
    +----------------------------------------------------------------+
    | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +----------------------------------------------------------------+
    1 row in set (0.00 sec)mysql> SELECT @@SESSION.sql_mode;
    +----------------------------------------------------------------+
    | @@SESSION.sql_mode                                             |
    +----------------------------------------------------------------+
    | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +----------------------------------------------------------------+
    1 row in set (0.00 sec)mysql>
      

  4.   

    insert into a(user_name) values('abc'); 
      

  5.   

    mysql的老版本可以支持数据类型空值,5.1以后的估计是不行了。