J'ai récemment rencontré un problème au travail :
Certains traitements logiques de notre système sont mis en œuvre à l'aide de procédures stockées, mais un jour, le service client a signalé que la commande n'avait pas pu être passée. impliqué dans la commande Ressources de base, pas de problème.
Il y a deux lignes de code dans la procédure stockée de passation de commande :
1 declare _err int default 0;2 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;3 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _err=2;
Après avoir exécuté la procédure stockée, la variable _err renverra 1. Vous ne peut déboguer la procédure stockée que pour trouver le problème. Lors du débogage du paragraphe suivant, j'ai découvert qu'après l'exécution de ce SQL, _err est devenu 1
1 select group_concat(concat(@room_name,',',run_date,',',total_count) separator '|') into @order_desc from tmp_order_detail order by run_date;
en raison des données dans la table temporaire tmp_order_detail Il y avait un bon nombre, donc j'ai deviné que c'était un problème avec group_concat, j'ai donc réduit de moitié les données dans la table temporaire et j'ai constaté que cela avait réussi, alors j'ai deviné si group_concat avait une limite de longueur, je l'ai recherché sur Google, et bien sûr. .
À propos de la fonction group_concat :
group_concat : La longueur connectable par défaut est de 1024 si la longueur maximale a été définie, le dépassement de cette longueur sera Tronqué à cette longueur
Après avoir utilisé group_concat dans l'instruction de requête (select), la limite deviendra invalide
Solution :
1, Modifier le fichier de configuration MySQL :
#需要设置的长度 group_concat_max_len = 5120
SET GLOBAL group_concat_max_len=5120;SET SESSION group_concat_max_len=5120;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!