Mysql Mode

sql mode:
最重要几种模式:
  ANSI: (组合模式) 修改标准的语法行为,使之更接近标准SQL语法;
STRICT_TRANS_TABLES:事物表插入时,一个值没有被插入,则终止语句;非事务性表,如果该值出现在单行语句或第一行中,则中止该语句;
TRADITIONAL:(组合模式):给列中插入不正确值时,发出错误而不是告警;当错误发生的时候,INSERT或者UPDATE会终止;如果你在使用非事物引擎的时候不想这样,


因为在错误之前进行的数据更改可能不会回滚,这将导致部分完成update;


其他模式:
ALLOW_INVALID_DATES:不执行完整的日期检查,只检查月份在1-12的范围内,日期在1-31的范围。这对于从三个不同字段获取年、月、日,且你想存储的WEB应用程序


是用于实际插入的内容(没有日期验证)。该模式适用于DATE和DATETIME列,不应用于TIMESTAMP列(TIMESTAMP列需要有效日期);服务器要求月份和日期合法,而不仅仅是月1-


12,日1-31.禁用严格模式后,无效日期(如“2004-04-31”)将转换为“0000-00-00”,并生成警告。启用严格模式后,无效日期会生成错误。要允许这种日期,请启用


ALLOW_INVALID_DATES。
ANSI_QUOTES: ""双引号是标志识别号(同``),而不是字符串;
ERROR_FOR_DIVISION_BY_ZERO: MySQL 5.7.4,版本被移除
HIGH_NOT_PRECEDENCE: 更高的NOT优先级; 正常情况:NOT (a BETWEEN b AND c). 启用后:(NOT a) BETWEEN b AND c.
IGNORE_SPACE: 函数和括号之间允许空格,函数名必须以``表示;
NO_AUTO_VALUE_ON_ZERO:影响AUTO_INCREMENT列,通常对AUTO_INCREMENT插入NULL或者0的时候,就会自增;但该功能启用后,只能插入NULL才会自增;
NO_BACKSLASH_ESCAPES: 启用后,反斜杠\将是普通符号,不具有转义功能
NO_DIR_IN_CREATE: create表的时候,忽略INDEX DIRECTORY和 DATA DIRECTORY 指令,在SLAVE复制的时候有用;
NO_ENGINE_SUBSTITUTION: CREATE表的时候指定了系统不支持的引擎,不使用该功能,表会被以默认ENGINE创建返回warning; 启用改功能,表不会被创建,返回


error;ALTER都会失败
NO_FIELD_OPTIONS: SHOW CREATE TABLE的时候不输出特定列选项
NO_KEY_OPTIONS: SHOW CREATE TABLE的时候不输出特定INDEX选项
NO_TABLE_OPTIONS:SHOW CREATE TABLE的时候不输出特定表选项(eg ENGINE)
NO_UNSIGNED_SUBTRACTION:启用该功能后,unsigned 列减法的结果可以是负数;即使指定了UNSIGNED,也会变成SIGNED;
NO_ZERO_DATE: 控制是否允许插入'0000-00-00'作为日期有效值。禁用情况下,可以插入;启用,可以插入,有告警;启用,且严格模式启用,禁止插入;V5.7.4弃用
NO_ZERO_IN_DATE:控制月份和日期部分0; V5.7.4弃用
ONLY_FULL_GROUP_BY:禁止对HAVING条件或ORDER BY之外的列进行查询;
PAD_CHAR_TO_FULL_LENGTH:是否修剪尾随空格;如定义char(10),插入xy的时候,未启用,长度是2,启用后,长度是10;
PIPES_AS_CONCAT: 将 || 视为CONCAT()
REAL_AS_FLOAT: 将REAL处理为FLOAT,默认情况会视REAL为DOUBLE;
STRICT_ALL_TABLES:对所有ENGINE启用严格模式;无效的date会被拒绝执行;
STRICT_TRANS_TABLES:对事物引擎启用严格模式,可能情况下,非事物也启用;
组合模式:
ANSI = REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, and (as of MySQL 5.7.5) ONLY_FULL_GROUP_BY.
DB2 = PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_FIELD_OPTIONS.
MAXDB = PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.
MSSQL = PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_FIELD_OPTIONS.
MYSQL323 = MYSQL V3.23 + HIGH_NOT_PRECEDENCE
MYSQL40 = MYSQL V40 +  HIGH_NOT_PRECEDENCE
ORACLE = PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER
POSTGRESQL = PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS,NO_TABLE_OPTIONS, NO_FIELD_OPTIONS
  TRADITIONAL 
Mysql V5.7.4之前: STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and 


NO_ENGINE_SUBSTITUTION.
Mysql V5.7.4-5.7.7:TRADITIONAL is equivalent to STRICT_TRANS_TABLES,STRICT_ALL_TABLES, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION.


严格模式:
严格模式控制mysql对无效date数据的处理;
未启用时,Mysql修改为无效的日期会有告警,严格模式下,可以INSERT IGNORE/UPDATE IGNORE调整;
SELECT 无效日期的时候,严格模式会有warning;
当键值超过最大长度的时候,严格模式会生成错误,未启用的时候,会将键值截断为最大长度;
严格模式不影响外键约束的检查;
启用严格模式,即STRICT_ALL_TABLES or STRICT_TRANS_TABLES ;
限制除数是0的MODE(n,0)
插入日期为0的时候返回ERROR
插入0000-00-00 / 2010-01-00 / 2010-00-01会ERROR
































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值