今天在插入一条数据时发生错误:

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)

MySQL 返回: 

#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.

就说明启用严格模式了。

mysql Field xxx doesn't have a default value STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)的更多相关文章

  1. mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

    一.mysqlcheck 进行表的检查和修复 1.检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database  table  -c  #检查单 ...

  2. MYSQL数据库性能调优之五:解决慢查询--存储引擎与数据类型

    3.数据类型的影响 4.存储引擎的影响 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show var ...

  3. MySQL入门第三天(下)——存储过程与存储引擎

    一.存储过程 1.简介 原始的SQL执行的流程: 通过存储过程,便可以简化以上流程,那么存储过程是什么,如何进行性能提高呢? 是什么? 存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和 ...

  4. MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格, ...

  5. 1364:Field 'sex' doesn't have a default value [ SQL语句 ]

    1364:Field 'sex' doesn't have a default value [ SQL语句 ]   错误解决方法: 关闭MySQL的strict mode的具体做法: 找到MySQL目 ...

  6. Field "details" doesn't have a default value

    [转载:原文链接http://my.oschina.net/wojibuzhu/blog/511104] MySQL 1364 错误提示:#1364 - Field "details&quo ...

  7. MySQL之Field 'email' doesn't have a default value问题

    MySQL在出现这个Field xxx doesn't have a default value错误的原因是:我们设置了该字段为非空,但是我们没有设置默认值照成的. 比如我们创建一个表: CREATE ...

  8. Field 'email' doesn't have a default value

    MySQL在出现这个Field xxx doesn't have a default value错误的原因是:我们设置了该字段为非空,但是我们没有设置默认值造成的. 或着 缺少字段.

  9. [MySQL Reference Manual]14 InnoDB存储引擎

    14 InnoDB存储引擎 14 InnoDB存储引擎 14.1 InnoDB说明 14.1.1 InnoDB作为默认存储引擎 14.1.1.1 存储引擎的趋势 14.1.1.2 InnoDB变成默认 ...

随机推荐

  1. phone number is not known @w@ have no phone, and thus no phone number

    http://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html B.5.4.3 Problems with NULL Values The ...

  2. Flink - FLIP

    https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals FLIP-1 : Fine Grained ...

  3. oj 1031 random permutation

    Problem A: Random Permutations Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 91  Solved: 54 Descri ...

  4. UI auto test

    java.home/lib/security/java.policy (Solaris/Linux) http://www.cnblogs.com/richaaaard/p/5091059.html ...

  5. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  6. MySQL- 锁(3)

    InnoDB在不同隔离级别下的一致性读及锁的差异 前面讲过,锁和多版本数据是InnoDB实现一致性读和ISO/ANSI SQL92隔离级别的手段,因此,在不同的隔离级别下,InnoDB处理SQL时采用 ...

  7. python join split

    本文记录python,join和split函数的用法. 参考 http://blog.csdn.net/doiido/article/details/43538833 http://blog.csdn ...

  8. Definition Questions

    What is the relationship and differences between processes and threads? A process usually represent ...

  9. 基础-训练营-day1~day5

    基础 大纲  变量:      声明.初始化.使用.命名  数据类型:      int.long.double.boolean.char.String  运算符:      赋值.算术.关系.逻辑  ...

  10. 测试环境下将centos6.8升级到centos7的操作记录(转)

    在测试环境下安装openstack,由于在centos6下安装openstack,针对源的问题有很多,安装起来很不顺利! 但是在centos7下安装却很顺利,所以考虑将服务器由centos6升级到ce ...