设置mysql workbench的sql_mode,ONLY_FULL_GROUP_BY不起作用
来源:互联网 发布:ubuntu u盘挂载路径 编辑:程序博客网 时间:2024/05/08 23:04
问题
在mysql中,非严格的mysql默认情况下是可以正常执行的,
有用户表user,如下
虽然age不是group by字段,但是仍然可以在select中查询
但是我们知道这是非常不规范的方式,在某些情况下会产生业务上的错误;并且这样的sql在oracle中会报错,但是mysql默认是允许的。为了防止这种错误,我想到是否可以通过mysql客户端mysql workbench进行sql校验?
mysql workbench的尝试
经过一番研究,发现,Edit—–>Preference—–>General Editor中有个sql_mode
我欣喜若狂的设置了开启严格group by,但是不起作用。
查阅资料[链接1]mysql workbench sql_mode reference后,发现mysql workbench只支持部分sql_mode,原文如下
Only a subset of all possible SQL_MODE values affect the MySQL
Workbench SQL parser. These values are: ANSI_QUOTES,
HIGH_NOT_PRECEDENCE, IGNORE_SPACE, NO_BACKSLASH_ESCAPES,
PIPES_AS_CONCAT. Other values do not affect the MySQL Workbench SQL
parser and are ignored.
看到这几个名字也许不明白,这里先解释一下,
- ANSI_QUOTES
- 标准引用符,此参数开启后,双引号”当做关键字的引用符号,不再是文本字符串的引用符号,`作用不变仍然可以引用关键字。
- HIGH_NOT_PRECEDENCE
- not设置为高优先级, not a between b and c,会解释为 not (a between b and c),如果不加此参数,一些老的mysql版本,可能会被解释为 not a (between b and c)
- IGNORE_SPACE
- 忽略空格,就是函数名和(之间可以有空格,这种情况,它会把函数名当做关键字
- NO_BACKSLASH_ESCAPES
- 禁止反斜杠; 就是说\不再当做转义字符,只是普通的文本字符
- PIPES_AS_CONCAT
- 管线符连接,就是说||以前是逻辑或,开启此参数后,||就成为了字符串连接符,跟concat()函数一样了
转变思路,设置sql_mode变量
Ok,解释完毕,既然mysql workbench只支持有限的sql_mode,那么怎么开启严格group by模式呢?我又去翻了mysql sql_mode reference ,既然是sql_mode变量,可以通过变量值在限制group by,自然而然的,我们分别在session和global范围设置此变量
第一可以在session scope限制,set session sql_mode="ONLY_FULL_GROUP_BY"
第二可以在global scope限制,set global sql_mode="ONLY_FULL_GROUP_BY"
根据变量的语法,当然,也可以写成 set @@session.sql_mode=”“或者set @@global.sql_mode=”” 模式
关于mysql 变量请参考mysql 变量
设置后,再查询就会出错
总结
总结,mysql workbench作为一个客户端,也可以开启校验,但是由于不支持严格全group by,所以转变思路,考虑sql_mode是mysql服务器的系统变量, 所以只能通过设置系统变量来达到目的。
参考
mysql sql_mode reference
mysql workbench sql_mode reference
- 设置mysql workbench的sql_mode,ONLY_FULL_GROUP_BY不起作用
- mysql:sql_mode=“only_full_group_by”
- 解决macOS下mysql的sql_mode=only_full_group_by问题
- Mysql的sql_mode设置
- MySQL 5.7版本sql_mode=only_full_group_by问题
- [mysql] incompatible with sql_mode=only_full_group_by
- MySql版本问题sql_mode=only_full_group_by解决方案
- MySQL里面sql_mode=only_full_group_by解决办法
- mysql的sql_mode合理设置
- MySQL的sql_mode合理设置
- mysql的sql_mode合理设置
- mysql的sql_mode合理设置
- mysql的sql_mode合理设置
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- MySQL Error this is incompatible with sql_mode=only_full_group_by
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- mysql 5.7 this is incompatible with sql_mode=only_full_group_by 问题
- C++ Primer课后练习10.34~10.37,10.42
- linux环境配置maven
- highcharts用法
- html5 本地存储
- 【Java路径】问题
- 设置mysql workbench的sql_mode,ONLY_FULL_GROUP_BY不起作用
- MFC EDIT 文字 垂直居中的方法
- AngularJS Directive 隔离 Scope 数据交互
- ORICAL性能优化指南
- php 把对象转化为json
- 系统高可用
- 集合 ConcurrentModificationException 详解
- 利用tomcat等Web容器控制台弱口令getshell
- 20170112