MySQLsql_mode的使⽤详解
⽬录
前⾔
sql_mode详解
最重要的选项
全部选项
总结
前⾔
相信看过上⼀篇⽂章《》的童鞋,都应该意识到,sql_mode是⼀个⾮常关键的配置,接下来就带来该配置项的详细解析。sql_mode详解
sql_mode,会直接影响SQL语法⽀持和数据校验,它包含⾮常多的选项,其中5.7版本的默认值是
转换器应该怎么用“ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,;
while循环脚本
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
,⼀般不建议进⾏修改。
最重要的选项
sql_mode最重要的选项,包括以下3个:
(1)ANSI:该选项决定SQL语法⽀持,设置为ANSI,会更加遵守标准SQL语法。
(2)STRICT_TRANS_TABLES:该选项决定数据校验;对于事务性存储引擎,当出现⾮法值时,该事务会失败并回滚;对于⾮事务性存储引擎,如果⾮法值出现在第⼀⾏,那么该事务会失败,如果⾮法值出现在中间,那么会调整⾮法值,并抛出告警。
(3)TRADITIONAL:该选项决定与传统关系型数据库表现⼀致;对于⼀些⾮正常操作,直接报错失败⽽不是告警提⽰。
全部选项
怎么重启nginxsql_mode还包括以下选项:
(4)ALLOW_INVALID_DATES:该选项决定不进⾏严格的⽇期校验;它只校验⽉份范围是否为1-12、⽇期范围是否为1-31,不校验具体⽇期是否有效,⽐如2020-04-31这个⾮法⽇期是允许的。
(5)ANSI_QUOTES:该选项决定引⽤字符;它允许双引号"作为引⽤字符,和反引号`⼀样。
(6)ERROR_FOR_DIVISION_BY_ZERO:该选项决定被零整除的返回值;如果不启⽤,那么被零整除的返回值为null且不告警;如果启⽤但在⾮严格模式下,那么被零整除的返回值为null且产⽣告警;如果启⽤且在严格模式下,那么被零整除会直接报错。
(7)HIGH_NOT_PRECEDENCE:该选项决定not操作的优先级;启⽤后,NOT a BETWEEN b AND c被解析为NOT (a BETWEEN b AND c);在⼀些旧版本中,NOT a BETWEEN b AND c被解析为(NOT a) BETWEEN b AND c。
(8)IGNORE_SPACE:该选项决定忽略函数名和括号之间的空格;启⽤后,⽐如count (*)也不会报错。
(9)NO_AUTO_CREATE_USER:该选项决定grant语句不会⾃动创建⽤户;已过时,grant语句也不会创建⽤户。
(10)NO_AUTO_VALUE_ON_ZERO:该选项决定⾃增列的⽣成;⼀般来说,向⾃增列插⼊0或null,
系统会⾃动⽣成下⼀个⾃增值插⼊;启⽤后,向⾃增列插⼊0会保留原值0,插⼊null才会⾃动⽣成下⼀个⾃增值插⼊
(11)NO_BACKSLASH_ESCAPES:该选项决定反斜杠\的作⽤;启⽤后,反斜杠\不再作为转义字符,⽽是⽤作普通字符。
(12)NO_DIR_IN_CREATE:该选项决定忽略创建表时,所有的INDEX DIRECTORY和DATA DIRECTORY指令;该选项只在从库⽣效。
(13)NO_ENGINE_SUBSTITUTION:该选项决定创建表时,如果指定⼀个不存在/不⽀持的存储引擎,那么会⾃动转换为默认存储引擎。
(14)NO_FIELD_OPTIONS:已过时。
(15)NO_KEY_OPTIONS:已过时。
(16)NO_TABLE_OPTIONS:已过时。
(17)NO_UNSIGNED_SUBTRACTION:⼀般情况下,整数之间的减法(其中⼀个为⽆符号),结果为⽆符号,如果结果为负数则报错;启⽤该选项后,负数则可以正常处理。
(18)NO_ZERO_DATE:该选项决定‘0000-00-00'是否可以插⼊;如果不启⽤,那么‘0000-00-00'可以插⼊且不告警;如果启⽤但在⾮严格模式下,那么‘0000-00-00'可以插⼊但会产⽣告警;如果启⽤且在⾮严格模式下,那么‘0000-00-00'不能插⼊会直接报错。
(19)NO_ZERO_IN_DATE:该选项决定⽉份和⽇期是否可以为00;如果不启⽤,那么⽉份和⽇期可以为00且不告警;如果启⽤但在⾮严格模式下,那么⽉份和⽇期可以为00但会产⽣告警;如果启⽤且在⾮严格模式下,那么⽉份和⽇期不能为00会直接报错。
(20)ONLY_FULL_GROUP_BY:该选项决定select/having/order by后⾯的⾮聚合字段,必须出现在group by字句中。假客服源码
(21)PAD_CHAR_TO_FULL_LENGTH:⼀般情况下,查询char类型的字段,后⾯的空洞数据会被裁剪;启⽤该选项后,查询char类型的字段,后⾯的空洞数据不会被裁剪。
(22)PIPES_AS_CONCAT:该选项决定将||符号当作字符串的连接操作符,⽽不是当作OR同义词。
(23)REAL_AS_FLOAT:该选项决定将REAL当作FLOAT同义词,⽽不是DOUBLE同义词。mysql面试题详解
css鼠标样式属性(24)STRICT_ALL_TABLES:该选项决定数据校验;对于事务性存储引擎,当出现⾮法值时,该事务会失败并回滚;对于⾮事务性存储引擎,如果⾮法值出现在第⼀⾏,那么该事务会失败,如果⾮法
值出现在中间,那么前⾯操作会成功、后⾯操作会直接报错,出现事务部分成功部分失败的情况。
总结
通过上⾯的学习,相信⼤家对sql_mode各选项,都有较为详细的了解;关于sql_mode如何设置,个⼈建议如下:
(1)对于5.5/5.6版本,sql_mode建议参照5.7默认值进⾏设置;
(2)对于5.7版本,sql_mode保持默认值即可;
(3)对于8.0版本,sql_mode也保持默认值即可。
sql_mode的设置,可以让MySQL⾮常灵活地运⾏在各种不同模式下,但与此同时也带来各种各样的风险;在MySQL⼴泛应⽤于各类重要系统的情况下,建议是要对sql_mode进⾏严格审核设置,同时对开发代码进⾏规范化管理;其实这⼀点,也可以从官⽅默认值看出来,随着MySQL版本的迭代,sql_mode的设置也是越来越严格。
以上就是MySQL sql_mode的使⽤详解的详细内容,更多关于MySQL sql_mode的使⽤的资料请关注其它相关⽂章!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。