MySQL运维实战(4.2)关于SQL_MODE

云的事随心讲 2024-02-12 08:42:22
作者:俊达 早期,MySQL对一些不符合SQL标准的SQL语句和数据的容忍度比较高,可能会自主地执行或转换一些语句。但是,随着MySQL 5.7的推出,对默认的SQL模式进行了修改,更加强调SQL的合规性,这种变化是为了提高数据一致性和统一SQL标准。系统在升级MySQL版本时,特别是从低版本升级或迁移到5.7及更高版本时,为了规避新的SQL模式对原有的代码和数据产生影响导致的错误或不一致的行为,需要进行全面的测试,以确保系统顺利升级并保持稳定性。 5.7版本默认SQL_MODEmysql> 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_SUBSTITUTIONSQL_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 NO_ENGINE_SUBSTITUTION 其他SQL_MODE除了5.7默认设置的这些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的影响。 更多技术信息请查看云掣官网云掣YunChe - 可观测运维专家 | 大数据运维托管 | 云MSP服务
0 阅读:0

云的事随心讲

简介:感谢大家的关注