设置mysql workbench的sql_mode,ONLY_FULL_GROUP_BY不起作用
2017-01-17 17:32
731 查看
问题
在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 referencemysql workbench sql_mode reference
相关文章推荐
- 解决MySQL 5.7.9版本sql_mode=only_full_group_by问题
- sql_mode=ONLY_FULL_GROUP_BY 导致lepus监控mysql5.7报错
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- MYSQL5.7版本sql_mode=only_full_group_by问题
- MYSQL5.7版本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分组查询时出现错误SELECT list is not in GROUP BY ;this is incompatible with sql_mode=only_full_group_by
- mysql查询报错: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by
- MYSQL5.7版本sql_mode=only_full_group_by问题
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- sql_mode=only_full_group_by
- SELECT list is not in GROUP BY clause and contains nonaggregated column this is incompatible with sql_mode=only_full_group_by
- sql_mode=only_full_group_by引起group by查询报错问题
- 报错:this is incompatible with sql_mode=only_full_group_by
- mysql sql_mode=only_full_group_by 解决方案
- mysql查询报错: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by
- MySQL里面sql_mode=only_full_group_by解决办法
- MySql版本问题sql_mode=only_full_group_by解决方案
- MYSQL5.7版本sql_mode=only_full_group_by问题