有一表
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');这种方式
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');这种方式
解决方案 »
- 请教 Mysql 数据按日期分组显示
- 订单里的这几种状态各位会放在一个字段里,还是若干字段里
- C++调用存储过程出错!
- 数据表里存空字符串会不会对表的性能产生影响啊?
- 求一个思路
- [灭顶之灾]求助:就刚才一次误操作,把学校的一个论坛数据库给删除了,如何恢复。
- 连接mysql数据库时程序中执行时总报错
- 下列条件的SQL如何写?
- 在MySql下,怎么用SQL语句遍历一个树结构?
- 插入mysql数据库报Incorrect string value: '\xF0\x9F\x90\x82'错误
- 怎样用c语言调用mysql中的存储过程?
- windows程序报错想跟踪mysql执行情况(相当于mssql事件探查器功能).请教哪位会?
因为你的''值插入到bigint列,已经是个超出范围的值情况,而在非严格SQL模式下,你一样可以insert进表,因为“如果向列内插入不合适的或超出范围的值,MySQL将该列设定为'最好的可能的值',而不是报告错误。对于数字值,为0、可能的最小值或最大值。”,所以,就出现了你上面记录填0的情况。除掉insert into a(id,user_name) values(null,'abc');这种方式
还可以不对列id插入值:insert into a(user_name) values('abc');
+----------------------------------------------------------------+
| @@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>