zoukankan      html  css  js  c++  java
  • mysql Field xxx doesn't have a default value STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)

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

    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.

    就说明启用严格模式了。

  • 相关阅读:
    WCF框架基础(三)
    前台动态增加行,并将结果打印到XML文件
    WCF框架基础(二)
    Out Ref用法
    uploadify3.1版本参数使用详解
    WCF框架基础(一)
    ajax直接调用后台
    Linq to DataSet查询
    3.2版uploadify详细例子(含FF和IE SESSION问题)
    sprintf以及__int64 与long long int
  • 原文地址:https://www.cnblogs.com/youxin/p/5360741.html
Copyright © 2011-2022 走看看