• sql_mode值的含义


    ONLY_FULL_GROUP_BY
    对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。
     
     
    NO_AUTO_VALUE_ON_ZERO
    该值影响自增长列的插入。默认情况下,在对自增主键插入NULL或0时,会自动生成下一个值。若开启该MODE,当插入0时,并不会自动生成下一个值。
    如果表中自增主键列存在0值,在进行逻辑备份还原时,可能会导致数据不一致。所以mysqldump在生成备份数据之前,会自动开启该MODE,以避免数据不一致的情况。
    
     
    STRICT_TRANS_TABLES
    在该模式下,如果一个值不能插入到一个事物表中,则中断当前的操作,对非事物表不做限制。
     
     
    NO_ZERO_IN_DATE
    同NO_ZERO_DATE类似,只不过NO_ZERO_DATE针对的是'0000-00-00',而NO_ZERO_IN_DATE针对的是年不为0,但月或者日为0的日期,如,'2010-00-01' or '2010-01-00'。
    实际效果也是取决于是否开启严格模式,同NO_ZERO_DATE一样。 
     
     
    NO_ZERO_DATE
    该MODE会影响'0000-00-00'的插入。实际效果还取决于是否开启严格模式。
    1. 在开启严格模式,且同时开启该MODE,是不允许'0000-00-00'插入的。
    2. 只开启严格模式,不开启该MODE,允许'0000-00-00'值的插入,且不提示warning。
    3. 不开启严格模式,只开启该MODE,允许'0000-00-00'值的插入,但提示warning。
    4. 不开启严格模式,也不开启该MODE,允许'0000-00-00'值的插入,且不提示warning。
    
     
    ERROR_FOR_DIVISION_BY_ZERO
    在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL。
     
     
    NO_AUTO_CREATE_USER
    MODE禁止的只是不带“identified by”子句的grant语句,对于带有“identified by”子句的grant语句,其并不会禁止。
     
     
    NO_ENGINE_SUBSTITUTION
    在开启该MODE的情况下,在创建表时,如果指定的存储引擎不存在或不支持,则会直接提示“ERROR”。
    若不开启,则只会提示“Warning”,且使用默认的存储引擎。
     
     
    PIPES_AS_CONCAT
    将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似。
     
     
    ANSI_QUOTES
    启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符。
     
     
    ANSI
    宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
     
     
    TRADITIONAL
    严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
     
     
    STRICT_TRANS_TABLES
    严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
    
    
    ALLOW_INVALID_DATES
    若开启该MODE,对于month和day的检测会相对宽松。其中,month只需在1~12之间,day只需在1~31之间,而不管其是否有效,如下面的'2004-02-31'。注意,该MODE只适用于DATE和DATETIME,不适用于TIMESTAMP。
     
     
    IGNORE_SPACE
    默认情况下,函数名和左括号(“(”)之间不允许存在空格。若开启该MODE,则允许。
    
    
    NO_BACKSLASH_ESCAPES
    默认情况下,反斜杠“”会作为转义符,若开启该MODE,则反斜杠“”会作为一个普通字符,而不是转义符。
    
    
    NO_DIR_IN_CREATE
    默认情况下,在创建表时,可以指定数据目录(DATA DIRECTORY)和索引目录(INDEX DIRECTORY),若开启该MODE,则会忽略这两个选项。在主从复制场景下,可在从库上开启该MODE。
    
    
    NO_UNSIGNED_SUBTRACTION
    两个整数相减,如果其中一个数是无符号位,默认情况下,会产生一个无符号位的值,如果该值为负数,则会提示“ERROR”。
    
    
    PAD_CHAR_TO_FULL_LENGTH
    在对CHAR字段进行存储时,在Compact格式下,会占用固定长度的字节。
    如下面的c1列,定义为char(10),虽然'ab'只占用两个字节,但在Compact格式下,会占用10个字节,不足部分以空格填充。
    在查询时,默认情况下,会剔除掉末尾的空格。若开启该MODE,则不会剔除,每次都会返回固定长度的字符。
    
    
    REAL_AS_FLOAT
    在创建表时,数据类型可指定为real,默认情况下,其会转化为double,若开启该MODE,则会转化为float。
    
    
    STRICT_ALL_TABLES
    对事务表开启严格模式。
    
    
    STRICT_TRANS_TABLES
    对所有表开启严格模式。
    
    
    TIME_TRUNCATE_FRACTIONAL
    在时间类型定义了小数秒的情况下,如果插入的位数大于指定的位数,默认情况下,会四舍五入,若开启了该MODE,则会直接truncate掉。
    
    
    
    MySQL各版本sql modes区别
    5.5 
    The default SQL mode is empty (no modes set).
     
     
    5.6
    The default SQL mode is NO_ENGINE_SUBSTITUTION.
     
     
    5.7
    The default SQL mode in MySQL 5.7 includes these modes: 
    ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, 
    ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION.
     
    These modes were added to the default SQL mode in MySQL 5.7: 
    The ONLY_FULL_GROUP_BY and STRICT_TRANS_TABLES modes were added in MySQL 5.7.5. 
    The NO_AUTO_CREATE_USER mode was added in MySQL 5.7.7. 
    The ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE modes were added in MySQL 5.7.8.
     
     
    8.0
    The default SQL mode in MySQL 8.0 includes these modes: 
    ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, 
    ERROR_FOR_DIVISION_BY_ZERO, and NO_ENGINE_SUBSTITUTION.
  • 相关阅读:
    官方示例之地球模块十:拔高GeoPolygon
    全景虚拟漫游技术实现(three.js vs ThingJS) Javascript 3D开发 前端 物联网 webgl 三维建模 3D模型 虚拟 全景
    一个3D城市地图应用工具,等你获取 3D 全景 可视化
    H5动画优化之路
    CSS3实现气泡效果
    清除浮动方法总结
    静态页面参数传递&回调函数写法&快速排序的实现方法
    使用SeaJS实现模块化JavaScript开发(新)
    《无懈可击的Web设计》_灵活的文字
    深入探究JavaScript中的比较问题
  • 原文地址:https://www.cnblogs.com/liang545621/p/12606231.html
Copyright © 2020-2023  润新知