MySQL运维实战(4.2) 关于SQL_MODE

俊达1年前技术文章363

早期mysql对一些不符合SQL标准的SQL语句和数据的容忍度比较高。

mysql 5.7 修改了默认sql mode。系统从低版本升级或迁移到高版本时,需要经过全面的测试,避免影响程序的正常运行。


5.7 默认SQL_MODE

mysql> show global variables like '%sql_mode%'\G
*************************** 1. row ***************************
Variable_name: sql_mode
        Value: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


SQL_MODE

描述

ONLY_FULL_GROUP_BY

使用group by的SQL语句,select不在group by列表中的字段,需要使用聚合函数。

STRICT_TRANS_TABLES

严格模式,不允许非法数据写入到数据库中的事物型存储引擎(innodb)

NO_ZERO_IN_DATE

日期中不允许出现年、月或日为0的情况

NO_ZERO_DATE

不允许0000-00-00的日期

ERROR_FOR_DIVISION_BY_ZERO

除数为0时报错。

NO_AUTO_CREATE_USER

grant语句不自动创建用户

NO_ENGINE_SUBSTITUTION

建表指定的engine不存在时报错



除了5.7默认设置的这些SQL_MODE,还有一些SQL_MODE也值得关注:


其他SQL_MODE

SQL_MODE

描述

NO_BACKSLASH_ESCAPES

反斜杠(\)不用作转义符

NO_UNSIGNED_SUBTRACTION

unsigned整数参与到减法中时,不转换成unsigned。允许结果为负数。

PIPES_AS_CONCAT

使用|| 作为字符串连接的操作符号

ALLOW_INVALID_DATES

允许非法日期,如2021-02-31

ANSI_QUOTES

双引号(")可用做标识符(如表名、字段名)引用


后续分别测试这些SQL_MODE的影响。

相关文章

MySQL运维实战(5.3) MySQL数据乱码的一些情况

MySQL运维实战(5.3) MySQL数据乱码的一些情况

表数据乱码当数据的真实编码和相关参数(常见的包括character_set_client, character_set_result, 字段的编码,终端的编码)不一致时,会产生乱码。测试1 - 表中的...

MySQL运维实战(5.5) 数据导入导出时的字符集问题

mysql可以使用load data/select into outfile或mysqldump工具进行数据导入导出。下面分别分析数据导入导出时的字符集相关问题。准备测试数据创建测试表,2个字段分别使...

MySQL运维实战(3.1) MySQL官方客户端使用介绍

mysql是mysql安装包默认的客户端。位于二进制安装包的bin目录。或者通过rpm安装包安装mysql-community-client。使用mysql程序linux终端下,输入mysql命令登陆...

MySQL运维实战之备份和恢复(8.2)xtrabackup备份到云端(OSS)

xtrabackup工具中有一个xbcloud程序,可以将数据库直接备份到S3对象存储中,本地不落盘。这里介绍将数据库直接备份到OSS的一种方法。具体方法如下:1、准备OSS我们使用ossutil工具...

 MySQL运维实战(1.3)安装部署:源码编译安装

MySQL运维实战(1.3)安装部署:源码编译安装

源码编译安装通常不需要自己编译mysql源码,编译的mysql和二进制包的内容基本一致。当然有些时候可能会需要采用源码编译的方式安装,安装一些非标准版本的mysql安装一些社区的patch、bugfi...

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

如上图架构,当后端MySQL主库出现问题,发生主备切换后,如何自动将ProxySQL的读写切换到新的主库上?可以通过mysql_replication_hostgroups表配置实现:insert&n...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。