zoukankan      html  css  js  c++  java
  • ThinkPHP的sql_mode的默认设置,导致无效信息被插入

    在thinkphp中的DbMySql.class.php和DbMySqli.class.php中每次连接mysql后,都会自动设置sql_mode='';

     mysql_query("SET sql_mode=''",$this->linkID[$linkNum]);

    这导致在一个表中,只要有自增主键,在判断插入记录是否成功时,始终返回的是true

    关于sql_mode:

    查看系统设定中的sql_mode,SELECT @@global.sql_mode;

    5.6默认是

    STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


    SQL语法支持类:

    ONLY_FULL_GROUP_BY
    对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的。是可以理解的,因为不在 group by 的列查出来展示会有矛盾。

    ANSI_QUOTES
    启用 ANSI_QUOTES 后,不能用双引号来引用字符串,因为它被解释为识别符,作用与 ` 一样。
    设置它以后,update t set f1="" ...,会报 Unknown column ‘’ in ‘field list 这样的语法错误。

    PIPES_AS_CONCAT
    将 || 视为字符串的连接操作符而非 或 运算符,这和Oracle数据库是一样的,也和字符串的拼接函数 CONCAT() 相类似

    NO_TABLE_OPTIONS
    使用 SHOW CREATE TABLE 时不会输出MySQL特有的语法部分,如 ENGINE ,这个在使用 mysqldump 跨DB种类迁移的时候需要考虑。

    NO_AUTO_CREATE_USER
    字面意思不自动创建用户。在给MySQL用户授权时,我们习惯使用 GRANT ... ON ... TO dbuser顺道一起创建用户。设置该选项后就与oracle操作类似,授权之前必须先建立用户。


    数据检查类:

    NO_ZERO_DATE
    认为日期 ‘0000-00-00’ 非法,与是否设置后面的严格模式有关。
    1.如果设置了严格模式,则 NO_ZERO_DATE 自然满足。但如果是 INSERT IGNORE 或 UPDATE IGNORE,’0000-00-00’依然允许且只显示warning
    2.如果在非严格模式下,设置了NO_ZERO_DATE,效果与上面一样,’0000-00-00’允许但显示warning;如果没有设置NO_ZERO_DATE,no warning,当做完全合法的值。
    3.NO_ZERO_IN_DATE情况与上面类似,不同的是控制日期和天,是否可为 0 ,即 2010-01-00 是否合法。


    NO_ENGINE_SUBSTITUTION
    使用 ALTER TABLE或CREATE TABLE 指定 ENGINE 时, 需要的存储引擎被禁用或未编译,该如何处理。启用NO_ENGINE_SUBSTITUTION时,那么直接抛出错误;不设置此值时,CREATE用默认的存储引擎替代,ATLER不进行更改,并抛出一个 warning .

    STRICT_TRANS_TABLES
    严格模式,进行数据的严格校验,错误数据不能插入,报error错误
    注意 STRICT_TRANS_TABLES 不是几种策略的组合,单独指 INSERT、UPDATE出现少值或无效值该如何处理:
    1.前面提到的把 ‘’ 传给int,严格模式下非法,若启用非严格模式则变成0,产生一个warning
    2.Out Of Range,变成插入最大边界值
    3.A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition

  • 相关阅读:
    poj 2002 Squares 几何二分 || 哈希
    hdu 1969 Pie
    hdu 4004 The Frog's Games 二分
    hdu 4190 Distributing Ballot Boxes 二分
    hdu 2141 Can you find it? 二分
    Codeforces Round #259 (Div. 2)
    并查集
    bfs
    二维树状数组
    一维树状数组
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6811082.html
Copyright © 2011-2022 走看看