一.group_concat函数
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少
登录mysql或者navicat连接,查看默认
show variables like 'group_concat_max_len';
默认是1024
会导致字符串不完整的现象出现
度官方文档https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html
1.window下
修改my.ini文件,在[mysqld]下新增
下面两句一条即可,4294967295我在新增完成之后,mysql服务重启失败,启动不了
改为10240000重启成功,注意,后面没有标点符号
group_concat_max_len = 4294967295
group_concat_max_len = 10240000
然后重启mysql服务即可
我的电脑 - 管理 - 服务和应用 - 服务 - 在列表中找到mysql - 重启
2.linux下
修改mysqld.cnf文件,这是我的mysql配置文件
vi mysql/mysql.conf.d/mysqld.cnf
在[mysqld]下新增
group_concat_max_len = 10240000
重启mysql服务
service mysql restart
service mysql status
3.如果是生产环境
无法重启mysql服务的情况,选择临时通过sql命令修改
SET GLOBAL group_concat_max_len = 10240000;
SET SESSION group_concat_max_len = 10240000;
注意:这种方式修改,服务重启后会失效
二:GROUP BY clause and contains nonaggregated column
ONLY_FULL_GROUP_BY是根源,去掉
1.通过sql命令修改
本地这样配置没生效过
select @@global.sql_mode;
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'
更改mysql配置文件
vi /etc/mysql/conf.d/mysql.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
重启服务
service mysql restart
三:datetime 默认值为‘0000-00-00 00:00:00'问题
NO_ZERO_IN_DATE,NO_ZERO_DATE是无法默认为‘0000-00-00 00:00:00’的根源,去掉之后再次新建表 就可以了
1.通过sql命令修改
本地这样配置没生效过
select @@global.sql_mode;
set @@global.sql_mode =
'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREAT
E_USER,NO_ENGINE_SUBSTITUTION'
2.更改mysql配置文件
vi /etc/mysql/conf.d/mysql.cnf
新增下面代码(有就修改)
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AU
TO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重启服务
service mysql restart