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快。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM