MySQL运维实战(4.2) 关于SQL_MODE

这篇具有很好参考价值的文章主要介绍了MySQL运维实战(4.2) 关于SQL_MODE。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:俊达

早期,MySQL对一些不符合SQL标准的SQL语句和数据的容忍度比较高,可能会自主地执行或转换一些语句。但是,随着MySQL 5.7的推出,对默认的SQL模式进行了修改,更加强调SQL的合规性,这种变化是为了提高数据一致性和统一SQL标准。系统在升级MySQL版本时,特别是从低版本升级或迁移到5.7及更高版本时,为了规避新的SQL模式对原有的代码和数据产生影响导致的错误或不一致的行为,需要进行全面的测试,以确保系统顺利升级并保持稳定性。

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 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的影响。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw文章来源地址https://www.toymoban.com/news/detail-799283.html

到了这里,关于MySQL运维实战(4.2) 关于SQL_MODE的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql sql_mode数据验证检查

    sql_mode 功能 sql_mode 会影响MySQL支持的sql语法以及执行的 数据验证检查 。通过设置sql_mode ,可以完成不同严格程度的数据校验,有效地保障数据准确性 sql_mode 严格模式 VS 宽松模式 宽松模式 比如,插入的数据不满足 表的数据类型,也可能接受,并且不报错,只会有警告而且。

    2024年02月10日
    浏览(37)
  • 开源数据库MYSQL DBA运维实战 第二章 SQL

    1.1定义库 创建业务数据库         语法:CREATE  DATABASE   数据库名;         数据库命名要求:                 区分大小写                 唯一性                 不能使用如create  select                 不能单独使用数字和特殊符号如-                

    2024年02月20日
    浏览(72)
  • mysql:关闭sql_mode=ONLY_FULL_GROUP_BY模式

    JAVA后台报错信息: 原因: mysql默认开启only_full_group_by模式,当碰到不符合格式的group by 语句就会报错;(sql_mode=only_full_group_by 模式 要求 select 多少个字段对象,则group by 后面就需要带上多少个字段对象;) 例如sql语句如下: 运行时就会报错: 其大体的意思就是这个sql语句

    2024年01月18日
    浏览(33)
  • 关系数据库-9-[mysql8]中的语法校验规则sql_mode应用

    Mysql中sql_mode使用详解 sql_mode是一组mysql的语法校验规则,定义了mysql应该支持的sql语法、数据校验等。 1.3.1 ANSI模式 这是一种宽松模式,该模式下,会对所操作数据进行校验,如果不符合校验规则,数据会按照规则执行,并报warning警告。 1.3.2 STRICT_TRANS_TABLES模式 这是一种严格

    2024年02月02日
    浏览(34)
  • MySQL错误sql_mode=only_full_group_by完美解决方案

    mysql是高版本,当执行group by时,select的字段不属于group by的字段的话,sql语句就会报错。 错误提示:this is incompatible with sql_mode=only_full_group_by 1.查询数据库版本: SELECT VERSION(); 2.查看sql_mode的语句: select @@GLOBAL.sql_mode; 3.临时解决方案: 去掉ONLY_FULL_GROUP_BY,重新设置值。 SET

    2023年04月09日
    浏览(29)
  • MySQL:报错this is incompatible with sql_mode=only_full_group_by

    在mysql 工具 搜索或者插入数据时报下面错误: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column \\\'database_tl.emp.id\\\' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 原因: 首先,我们看一下group by的语法

    2024年01月20日
    浏览(42)
  • mysql 8.0 找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

    sql_mode=only_full_group_by问题产生原因:MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。 1、navcat中新建查询: select @@

    2024年01月23日
    浏览(43)
  • 解决MySQL-this is incompatible with sql_mode=only_full_group_by 问题(提供window、Linux、docker解决方法和流程)

    出现这个问题是因为,对于GROUP BY操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。 也就是说如果我分组查询,比如我表里有三个字段 id、name、type,我根据type分组查询,那么结果集里就不能包含name字段。 要想解决这个问题

    2024年02月04日
    浏览(37)
  • MySQL报错:sql_mode=only_full_group_by 4种解决方法含举例,轻松解决ONLY_FULL_GROUP_BY的报错问题

    ​ 作为初学者,我们在使用MySQL的时候总是会遇到各种各样的报错,让人头痛不已。其中有一种报错,sql_mode=only_full_group_by,十分常见,每次都是老长的一串出现,然后带走你所有的好心情。 ​​ 出现这样的报错,并不是因为你的代码写得不好,而是因为在MySQL 5.7后,MySQ

    2024年02月22日
    浏览(40)
  • 看了mysql8.0官网,发现set sql_mode原来有可以不用修改my.cnf或mysqld-auto.cnf就可以持久化系统变量的方式

    @@GLOBAL.sql_mode: 全局级别的设置,影响所有新的客户端连接。通常需要具有高级权限才能修改,且修改后对尚未建立连接的新会话生效,对当前已存在的会话无效。MySQL服务器重启后,如果没有在配置文件中永久设定,全局设置将恢复到服务器启动时的默认值或配置文件中的设

    2024年04月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包