TiDB 如何设置支持 Group By

我们先来回顾下Mysql 5.7版本之后默认是不支持Group By 语句的。如果mysql5.7版本没有设置,使用group by 查询语句时出现错误,如下图所示:

可以进入mysql 命令行中使用如下命令
mysql> SELECT @@GLOBAL.sql_mode;
进行查询结果如下

所以我们需要做的就是将上面ONLY_FULL_GROUP_BY属性注掉。最好的办法就是对Mysql配置文件进行修改,使全局生效,修改如下,以CentOS为例vim /etc/my.cnf 在[mysqld] 中添加sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ,如下图所示

重启Mysql 使修改的配置文件生效 命令如下:service mysql restart。

那么问题来了,TiDB中是否支持Group By 语句?答案是否定的,TiDB同样也不支持Group By 语句。如何设置呢,这里将给出最佳答案,登陆TiDB命令行, mysql -u root -h 内网ip -P 4000(如果root设置密码输入密码) 执行如下语句set @@global.sql_mode= ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’; Tidb将该属性写入kv层,不用重启TiDB集群,设置立即生效。 (本人也是初学者,有什么不对希望指正:crazy_face:)

1 个赞

哈哈,同事我来啦

这个其实不是不支持 group by 语句,而是说在这种情况下,查询的结果会出现随机性,因为 select 里面的字段和 group by 里面的字段没有函数依赖关系。具体的可以参考一下 mysql 的文档,里面有列举一些关于 ONLY_FULL_GROUP_BY 的例子:12.20.3 MySQL Handling of GROUP BY

2 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。