mysql Field xxx doesn't have a default value STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)
2016-04-06 19:25 youxin 阅读(2028) 评论(0) 编辑 收藏 举报今天在插入一条数据时发生错误:
Field serverid doesn’t have a default value.
serverid是设置成了not null int类型的,但是插入的是'',就报了上面的错误。在另一台机子上则不会报错。很奇怪,找了几个小时,终于找到原因了。问题详细情况如下:
例如有张usr表,start设置为not null.
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY key ,
`start` int(255) NOT NULL,
`length` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后执行insert语句:
insert into user(length) values(1)
就报错了:
insert into user(length) values(1)
#1364 - Field 'start' doesn't have a default value
我在另一台机子上执行就没有问题。
在MySQL 5.0.2之后对数据输入进行了强制性的加严处理,并且保留了以前的MySQL对非法或不当值并不严厉的行为,MySQL默认是对数据进行加严处理,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。
在my.cnf中
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES (没找到这个)
其中:
STRICT_ALL_TABLES - Behave more like the SQL standard and produce errors when data is out of range.
STRICT_TRANS_TABLES - Behave more like the SQL standard and produce errors when data is out of range, but only on transactional storage engines like InnoDB.
由于mysql 5.6默认用innodb ,所以用STRICT_TRANS_TABLES也容易理解。用了这个选项的话,
那么数据库中如果是非空值的话就得设置默认值了,否则是报错的 。
假如无法看到my.ini,你可以执行以下SQL命令。
SQL: SELECT @@GLOBAL.sql_mode;
返回:
STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION.
就说明启用严格模式了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2015-04-06 python select poll
2015-04-06 python SocketServer
2015-04-06 boost implicit_cast
2013-04-06 APT upgrade 和 dist-upgrade 的差別
2013-04-06 转:yum和apt-get用法及区别
2013-04-06 转:虚拟机VirtualBox中Ubuntu无法全屏解决方法
2012-04-06 For在VC6.0和VS2010编译器下的作用域问题