mysql 函数 GROUP_CONCAT 踩坑记录,报错:Row 244 was cut by GROUP_CONCAT
- 结论:个人建议还是放在内存中拼接吧~
- db日志信息:`Row 244 was cut by GROUP_CONCAT())`
- 根本原因:拼接的字符串长度超过 group_concat_max_len [默认长度1024] 被截断了
- 解决方案:
- 方案1:修改 GLOBAL 的 `group_concat_max_len` ,然后重启 mysql 和会话
- 方案2:修改 SESSION 的 `group_concat_max_len`,无需重启 mysql,但仅适用于当前会话
- 方案3[个人推荐]:放在内存中拼接
- 其他补充
结论:个人建议还是放在内存中拼接吧~
db日志信息:Row 244 was cut by GROUP_CONCAT())
根本原因:拼接的字符串长度超过 group_concat_max_len [默认长度1024] 被截断了
解决方案:
方案1:修改 GLOBAL 的 group_concat_max_len
,然后重启 mysql 和会话
SET GLOBAL group_concat_max_len = -1 # 如果设置为 -1 代表是最大值
SET GLOBAL group_concat_max_len = 1073741824
show variables like 'group_concat_max_len';
方案2:修改 SESSION 的 group_concat_max_len
,无需重启 mysql,但仅适用于当前会话
是一个临时的、会话范围的设置。它仅适用于当前会话。
SET SESSION group_concat_max_len = -1 # 如果设置为 -1 代表是最大值
show variables like 'group_concat_max_len';
方案3[个人推荐]:放在内存中拼接
其他补充
- concat() 函数:将多个字符串连接成一个字符串。如果有任何一个参数为null,则返回值为null。
- 语法:concat(str1, str2,…)
select CONCAT("a","b","c") # abc select CONCAT("a", NULL ,"c") # [NULL]
- 语法:concat(str1, str2,…)
- concat_ws() 函数:将多个字符串连接成一个字符串,可以一次性指定分隔符。(concat_ws就是concat with separator)。第一个参数指定分隔符。分隔符不能为null,如果为null,则返回结果为null。
- 语法:concat_ws(separator, str1, str2, …)
select CONCAT_WS(",","a","b","c") # a,b,c select CONCAT_WS("-", NULL ,"b","c") # b-c select CONCAT_WS(NULL , "a" ,"b","c") # [NULL]
- 语法:concat_ws(separator, str1, str2, …)
- group_concat() 函数:将多行转换为单个字符串,该函数的结果的最大长度默认为1024个字符。(将 group by 产生的同一个分组中的值连接起来,返回一个字符串)
- 语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
SELECT material_id, lang, text FROM materials_langs WHERE text != '' AND is_del = 0
SELECT material_id, GROUP_CONCAT(text ORDER BY lang) AS txt from materials_langs WHERE text != '' AND is_del = 0 group by material_id
- 语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )