mysql数据类型字段插入空字符串自动填充为0报错

有一条这样的sql语句,

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

表示插入字段的时候ID插入是空字符串。这样的情况在mysql5.6版本上执行报错。在mysql5.1版本执行可以成功,

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

为什么不写空字符串不能写null?

这是因为mysql受到了字段类型的约束,设置为not null 了

NULL 和 NOT NULL 修饰符:
可以在每个字段后面都加上这NULL 或 NOT NULL 修饰符来指定该字段是否可以为空(NULL),还是说必须填上数据(NOT NULL)。MySQL默认情况下指定字段为NULL修饰符,如果一个字段指定为NOT NULL,MySQL则不允许向该字段插入空值(这里面说的空值都为NULL),因为这是“规定”。
not null 表示这个字段不能为空 
虽然看起来他是人为设置的 但是他和业务逻辑或者数据结构有关系
比如你要对这条记录进行读取 而这个是很重要的属性 那么你不仅要让其不为空 还要让他是指定的格式或者数值
还有情况就是 这个字段恰是其他表的主键 那么只有他有值才能正确关联两张表 所以他必须有值

所以没办法程序员只好改了程序,把这个字段给去掉了。。。-_-_-

这种问题一般mysql 5.x上出现。我用的mysql5.2.28,后面查询得知新版本mysql对空值会报错,要在安装mysql的时候去除默认勾选的enable strict SQL mode。如果已经安装好了的,就在my.ini中查找sql-mode,默认为sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",将其修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重启mysql后即可。

第一时间的反应是跟mysql5.0新加的sql-mode有关系,因为前一阵子刚刚看过手册.果然,作了如下更改后就不再提示了.

修改 my.ini 文件.

# Set the SQL mode to strict
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

改为:

# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

 

转载于:https://www.cnblogs.com/qinyujie/p/8780576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值