web-dev-qa-db-fra.com

Pourquoi définir `group_concat_max_len` en dessous du maximum?

MySQL 5.5.28 sur Ubuntu 12.04

Si le résultat est supérieur à group_concat_max_len alors le résultat est tronqué sans grâce.

Actuellement, j'ai un script qui essaie de vérifier à l'avance la longueur requise et définit group_concat_max_len pour être assez grand.

Mais la vérification ajoute des requêtes supplémentaires. Y a-t-il un inconvénient à simplement définir group_concat_max_len à la valeur maximale? L'avantage est moins de requêtes.

9
Buttle Butkus

Selon MySQL BOL ici

La valeur maximale pour group_concat_max_len pour 64 bits est 18446744073709551615

&

La valeur maximale pour group_concat_max_len pour 32 bits est 4294967295

Le résultat est tronqué à la longueur maximale donnée par la variable système group_concat_max_len, qui a une default value of 1024. La valeur peut être définie plus haut, bien que la longueur maximale effective de la valeur de retour soit limitée par la valeur de max_allowed_packet. La syntaxe pour modifier la valeur de group_concat_max_len à runtime est la suivante, où val est un unsigned integer:

SET [GLOBAL | SESSION] group_concat_max_len = val;

Remarque: La longueur du résultat maximum permitted En bytes pour la fonction GROUP_CONCAT(). La valeur par défaut est 1024.

Comme le blog MySQL documenté Ici Utilisation de GROUP_CONCAT avec un petit group_concat_max_len réglage? Votre résultat sera silently truncated (Assurez-vous cependant de vérifier les avertissements).

En tant que blog MySQL par @Shlomi Noachicigroup_concat_max_len: ce paramètre limite la longueur de texte maximum d'un résultat de concaténation GROUP_CONCAT. Il s'agit par défaut de 1024. Je pense que c'est une valeur très faible. J'ai utilisé GROUP_CONCAT De plus en plus récemment pour résoudre des problèmes autrement difficiles. Et dans la plupart des cas, 1024 N'était que too low, Ce qui entraînait silencieux (Argh!) À tronquer le résultat, renvoyant ainsi des résultats incorrects. Il est intéressant d'apprendre que la valeur maximale de ce paramètre est limitée par max_packet_size. Je suggère donc que ce paramètre soit complètement supprimé et que le max_packet_sizelimitation soit le only limitation. Sinon, j'aimerais qu'il ait un very large default value, de l'ordre de quelques-uns MB.

Pour plus loin votre ref ici & ici

2
Md Haidar Ali Khan

J'apprécie que cette question soit un peu ancienne maintenant, mais au cas où quelqu'un la trouverait et se demanderait, un inconvénient de la définition de la valeur maximale (ou sinon très grande) est que group_concat peut renvoyer un blob plutôt qu'un varchar. Suggestions ailleurs dites de mettre group_concat_max_len à 512 pour qu'il retourne toujours un varchar plutôt qu'un blob. Cependant, j'ai tendance à le jeter sur char au besoin.

2
Peter