MYSQL报错问题:Error Code: 1406. Data too long for column \

MySql 码拜 6年前 (2016-02-19) 738次浏览
本人的函数定义如下:

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

direction为2的时候这个是个死循环啊。
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);

10

可以参考下贴中写法。
http://blog.csdn.net/acmain_chm/article/details/4142971
MySQL中进行树状全部子节点的查询
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了全部当前节点下的全部子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中假如是有限的层次,例如我们事先假如可以确定这个树的最大深度是4, 那么全部节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们…

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MYSQL报错问题:Error Code: 1406. Data too long for column \
喜欢 (0)
[1034331897@qq.com]
分享 (0)