mysql数据类型字段,允许为空,插入''时,结果自动用0填充了。

chasterain 2009-08-11 01:39:12
有一表
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');这种方式
...全文
1367 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chasterain 2009-08-13
  • 打赏
  • 举报
回复
mysql的老版本可以支持数据类型空值,5.1以后的估计是不行了。
懒得去死 2009-08-12
  • 打赏
  • 举报
回复
insert into a(user_name) values('abc');
ACMAIN_CHM 2009-08-11
  • 打赏
  • 举报
回复
我认为应该有类似于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>
chasterain 2009-08-11
  • 打赏
  • 举报
回复
我认为应该有类似于sql_mode的这种控制方式的。只是我还没找到而已。oracle中就可以对number数据插入‘’。也许是因为oracle对''和null值都认为是null值的缘故
nianzhang747 2009-08-11
  • 打赏
  • 举报
回复
学习
hitexam 2009-08-11
  • 打赏
  • 举报
回复
学习
vinsonshen 2009-08-11
  • 打赏
  • 举报
回复
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');

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧