首页 新闻 会员 周边

MYSQL报错问题:Error Code: 1406. Data too long for column 'sTemp' at row 7求解!

0
悬赏园豆:5 [已解决问题] 解决于 2015-10-13 11:05

我的函数定义如下:

CREATE DEFINER=`root`@`localhost` FUNCTION `getChildLst`(rootId int,direction int) RETURNS varchar(1000) CHARSET utf8
BEGIN
 DECLARE sTemp VARCHAR(5000);
   DECLARE sTempChd VARCHAR(1000);
   SET sTemp = '$';
   IF direction=1 THEN
     SET sTempChd =cast(rootId as CHAR);
   ELSEIF direction=2 THEN SELECT cast(ParentId as CHAR) into sTempChd FROM Tree WHERE Id=rootId;END IF;
    WHILE sTempChd is not null DO
        SET sTemp = concat(sTemp,',',sTempChd);
        SELECT group_concat(id) INTO sTempChd FROM Tree where (direction=1 and  FIND_IN_SET(ParentId,sTempChd)>0)
        or (direction=2 and  FIND_IN_SET(Id,sTempChd)>0);
    END WHILE;
RETURN sTemp;
END

就是一个根据ID获取下级或父级ID

用法:

select * from tree where find_in_set(id,getChildLst(3,1)); 下查没有问题

select * from tree where find_in_set(id,getChildLst(3,2));上查就报错

报错:

Error Code: 1406. Data too long for column 'sTemp' at row 7

本人初用MYSQL,求MYSQL高手指教,谢谢!

梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2015-10-12 18:13
< >
分享
最佳答案
0

SET sTemp = concat(sTemp,',',sTempChd);  怀疑caoncat的结果,超过了sTemp的长度。

收获园豆:3
幻天芒 | 高人七级 |园豆:37175 | 2015-10-13 08:47

我表的数据内容如下:

ID  Name    ParendId

1 一级 0
2 2级 1
3 3级 2
4 4级 2
5 5级 3
6 5级2 3
     

getChildLst(3,2) 应该返回的结果是:$,1,2,可实际报数据太长,真不明白,又无法测试,求解!

 

梦在旅途 | 园豆:10 (初学一级) | 2015-10-13 10:10

@梦在旅途: 这个就要慢慢试验了。。用print打印变量出来。

幻天芒 | 园豆:37175 (高人七级) | 2015-10-13 13:24
其他回答(3)
0

sTemp VARCHAR(5000)你这个定义的才5000,超过了sTemp的长度

收获园豆:2
稳稳的河 | 园豆:4216 (老鸟四级) | 2015-10-13 09:20

我表的数据内容如下:

ID  Name    ParendId

1 一级 0
2 2级 1
3 3级 2
4 4级 2
5 5级 3
6 5级2 3
     

getChildLst(3,2) 应该返回的结果是:$,1,2,可实际报数据太长,真不明白,又无法测试,求解!

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2015-10-13 10:10

@梦在旅途: 直接在数据库调试下,把你定义的那几个变量的值打出来下

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-10-13 10:23

已解决,谢谢你的回复!

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2015-10-13 11:06
0

经过多次审核这个函数,发现导致这个报错的原因是:上查逻辑存在死循环,即:本应按照ID查到父ID,然后将父ID当成ID进行逐层向上查询,而实际却写成了依据父ID查询ID后始终是ID查ID,还是太粗心了,下次我得注意了,还是谢谢幻天芒稳稳的河的回复。

修改后的函数详见我的这篇博文:

关于SQL递归查询在不同数据库中的实现方法

梦在旅途 | 园豆:10 (初学一级) | 2015-10-13 11:02
0

谢谢让我意识到是死循环,我这里的问题是我的父节点id是-1,现在改成0就可以了

serendipity- | 园豆:202 (菜鸟二级) | 2019-09-29 17:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册