vlambda博客
学习文章列表

MacBook解决MySQL不能使用group by分组查询

前言

MySQL数据库我一般都使用云服务器上的MySQL 8.0,最近使用本地机器上的MySQL 5.7 发现不能使用group by子句,经百度得出如下解决方案。

执行语句

select * from user group by role_id;

报错信息

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sparkle.user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by, Time: 0.041000s

博主环境:

Mac OS 11.4

MySQL 5.7.30

解决方案

首先查看mysql安装目录下support-files文件夹下是否有my-default.cnf这个文件

如果没有my-default.cnf文件,就到 /etc 下创建一个my.cnf文件

sudo vim /etc/my.cnf

my.cnf

# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
default-character-set=utf8
#password = your_password
port = 3306
socket = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
#解决only_full_group_by的问题
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id = 1

# Uncomment the following if you want to log updates
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.
#binlog_direct_non_transactional_updates=TRUE

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

保存并退出。

上面的文件已经解决了only_full_group_by的问题,其他的配置请按需修改。

修改文件执行权限。

sudo chmod 664 /etc/my.cnf

如果有my-deafult.cnf

直接复制一份到/etc 目录下即可

mv /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

在my.cnf 的[mysqld]修改的是下面的内容,其他的内容可以根据实际需要,自行修改。

[mysqld]
#解决only_full_group_by的问题
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIOxwNxw



最后,MySQL作为中小企业的不二选择,有诸多安装、使用上的深坑,欢迎订阅此话题感谢!

References

https://www.sunjs.com/article/detail/ce6ff22e2ef841d59da486a681e7a3c0.html

https://www.sunjs.com/article/detail/d53a75484154402fa3fbcf33c51b23b9.html

文档信息

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
发表日期:2022年3月17日

订阅