GROUP_CONCAT
GROUP_CONCAT mysql 中自带的列转行函数,可以把多行的数据通过 “,” 号拼接起来。
当前有个需求查询mysql中的数据,然后使用 GROUP_CONCAT 函数把多条数组数据拼接起来,拿到这个拼接后的数据使用 pyhton 进行绘图。
之前没有这样的问题,今天项目上预发环境发现一个问题,python 绘制的图片出错。
通过排查找到了这个数据丢失了,然后一看查询sql,好家伙原来是 GROUP_CONCAT 的时候丢失了,一开始还很纳闷,明明数据都有,为什么查询出来的就比我自己手动拼接的要少呢,后来找到了由于 GROUP_CONCAT 在Mysql 8.0 中默认的长度是 1024,当拼接后的数据超过了这个长度那么就会丢失掉之后的数据。
查询当前数据库 GROUP_CONCAT 的长度方法:
show variables like 'group_concat_max_len'
显示的结果是这样的:
默认是 1024 这里修改了一下,修改的方式有两种:
1、临时修改:
SET GLOBAL group_concat_max_len = 102400;
SET SESSION group_concat_max_len = 102400;
2、修改配置:
group_concat_max_len = 102400第一种方法修改后能马上生效,但是当数据库重启或者服务器重启后就会失效,得重新设置。
第二种方法修改后直接作用于Mysql,当数据库重启或服务器重启后都能保持修改后得配置。
中文排序乱序
项目中经常遇到数据库排序问题,当使用 mysql 8.X 版本,然后字符类型使用的是UTF-8 的情况下就会出现中文排序稀奇古怪的情况,这是由于UTF-8默认排序规则引起的,通常情况下有以下两种解决方案:
1、使用函数把类型转换为 GBK 类型,例如这样:ORDER BY CONVERT(name USING gbk) DESC
2、直接把字段的类型设置为 GBK 的类型,但这样存储的时候可能会有些内容乱码情况,建议使用第一种方式。