通过父节点ID查询所有子节点ID,报错:data too long for column

建表:
create table t_dept
(
  n_dept_id int(11) not null auto_increment,
  n_keyin_id int(11) not null,
  n_dept_supervisor_id int(11) not null,
  n_dept_contact_id int(11),
  n_dept_father_id int(11),
  vc_dept_name varchar(4000) not null,
  vc_dept_tel varchar(4000),
  vc_note varchar(8000),
  dt_del_time datetime,
  primary key (n_dept_id)
);
其中:n_dept_id自己的ID, n_dept_father_id父ID

函数:
CREATE DEFINER=`root`@`localhost` FUNCTION `getChildLst`(rootId INT) RETURNS text CHARSET gbk
BEGIN
DECLARE sTemp text;
DECLARE sTempChd text;

 SET sTemp = '$';
 SET sTempChd =cast(rootId as char);
WHILE sTempChd is not null DO
  SET sTemp = concat(sTemp,',',sTempChd);
  SELECT group_concat(n_dept_id) INTO sTempChd FROM t_dept where FIND_IN_SET(n_dept_father_id,sTempChd)>0;
 END WHILE;
 RETURN sTemp;
 END;


测试: select * from t_dept
  where FIND_IN_SET(n_dept_id, getChildLst(4));
显示了id为4的那一行。但是如果把4换成1.就会报错:data too long for column for 'sTemple'

参数4和1唯一的不同是,没有父ID为4的行。但是有父ID为1的行。
求解。

作者: chongchongyehenmao   发布时间: 2011-06-07

把'sTemple'插到表里面调试看下

作者: rucypli   发布时间: 2011-06-07

你测试的表中数据是什么样? 是不是记录太多了?

作者: ACMAIN_CHM   发布时间: 2011-06-07