栏目头部广告

MySQL sql_mode参数详解

一、MySQL sql_mode介绍

MySQL sql_mode是一组MySQL的语法校验规则,定义了MySQL应该支持的SQL语法、数据校验等。

1.1 MySQL5.6官网介绍与可选参数

https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_sql_mode

image.png

1.2 MySQL5.7官网介绍与可选参数

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode

image.png

1.3  MySQL8.0官网介绍与可选参数

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_sql_mode

image.png

二、MySQL sql_mode的四种模式:宽松模式、严格模式

2.1 参数解读

mysql支持的sql_mode模式:ANSI、TRADITIONAL、STRICT_ALL_TABLES和STRICT_TRANS_TABLES。

  • ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
  • TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
  • STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。只对支持事务的表有效。
  • STRICT_ALL_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。对所有表都有效。

2.2 业务案例阐述

问题描述:添加一个超长的文章的时候,文章内容字段被MySQL截取后插入,导致文章内容不完整。(ANSI模式即宽松模式)
debug:经排查确认业务程序插入的SQL没有问题。
问题原因:MySQL使用了松散模式,造成自动截取。给debug带来困难

解决办法:

1、开启MySQL 严格模式,对开发有好处;
2、更换MySQL的字段类型,减少被截断的概率。

参考:MySQL中和text相关的类型最大长度限制,请根据业务类型进行合理选择:

  • TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。
  • TEXT 最大长度是 65535 (2^16 – 1) 个字符。
  • MEDIUMTEXT 最大长度是 16777215 (2^24 – 1) 个字符。
  • LONGTEXT 最大长度是 4294967295 (2^32 – 1) 个字符。

作者:UStarGao
链接:https://www.starcto.com/mysql/292.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`