mysql 无限递归出现 data too long for column 'xxx' 错误
1、先创建函数getChildId_bas_basic_tree 如下:
CREATE FUNCTION `getChildId_bas_basic_tree`(rootId int) RETURNS varchar(21844) CHARSET gbk
BEGIN
DECLARE pTemp Varchar(21844);
DECLARE cTemp Varchar(21844); -- 节点ID(临时变量)
SET pTemp = '';
SET cTemp =cast(rootId as CHAR); -- 把rootId强制转换为字符。
WHILE cTemp is not null DO
SET pTemp = concat(pTemp,',',cTemp); -- 把所有节点连接成字符串。
SELECT group_concat(childid) INTO cTemp FROM ranks
WHERE FIND_IN_SET(parentid,cTemp)>0;
END WHILE;
RETURN pTemp;
END
2、调用函数:
SELECT
childid,parentId
FROM
ranks T,
(SELECT @DATAS := getChildId_bas_basic_tree (1200)) a
WHERE find_in_set (childid, @DATAS);
ps:在调用 group_concat 函数时出现, “data too long for column 'xxx' ”
解决方法步骤:
第一步:设置 group_concat_max_len 值:
1.1)、查看
show variables like “group_concat_max_len”
1.2)、设置长度,GLOBAL是全局,SESSION指的是当前会话,重启会无效,所以要结合第三步
SET GLOBAL group_concat_max_len=10240;
SET SESSION group_concat_max_len=10240;
1.3)、配置中设置 my.cnf :
group_concat_max_len = 10240
如果还是出现: “data too long for column 'xxx' ” 错误
第二步:
2.1)、查询mysql的字符集:
show VARIABLES like 'character%';
2.2)、修改character_set_database 的value,执行如下sql:
alter database character set latin1;
对于递归函数 getChildId_bas_basic_tree 设置为gbk,以为gbk查询速率比uft8快。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix