Mysql的sql_mode模式
mysql数据库的中有一个环境变量sql_mode,定义了mysql应该支持的sql语法,数据校验等!
查看sql_mode
我们可以通过以下方式查看当前数据库使用的sql_mode:
#当前会话的 sql_mode
select @@sql_mode;
#或者
SHOW VARIABLES LIKE 'sql_mode';
# show variables like '%sql_mode';
或者
SELECT @@session.sql_mode;
#查看全局的 sql_mode
SELECT @@global.sql_mode;sql_mode值得含义:
mysql5.0以上版本支持三种sql_mode模式:
ANSI模式:
ANSI模式下,插入数据时,未满足列长度要求时,数据会插入成功,但是对超出列长度的字段进行截断,同时报告warning警告。
sql_mode默认值
mysql5.7
注MySQL5.6和MySQL5.7默认的sql_mode模式参数是不一样的。
5.6的mode是NO_ENGIN_SUBSTITUTION,表示一个空值,相当于没有模式设置,可以理解为宽松模式。
5.7的mode是STRICT_TRANS_TABLES,也就是严格模式。
mysql8默认配置了的mode(6个)
ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
STRICT_TRANS_TABLES:如果一个值不能插入到一个事务中,则中断当前的操作,对非事务表不做限制
NO_ZERO_IN_DATE:不允许日期和月份为零
NO_ZERO_DATE:mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO:在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL
NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
设置sql_mode
临时修改:
#设置当前会话的sql_mode
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
#设置全局的sql_mode
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';永久修改:
直接修改my.ini文件
#my.cnf
[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
本文链接:
/archives/1753539110855
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
刘同学的小站!
喜欢就支持一下吧