Contacter l'assistance

Nous répondons par e-mail, en général sous deux jours.

Pour prévenir les abus, Google reCAPTCHA vérifie cet envoi ; des données sont transmises à Google. Le script n'est chargé qu'à l'ouverture de ce formulaire.

← Tous les articles

Une URL trop longue a mis le compteur à terre

Le 9 août 2026, vingt images de compteur ne se sont pas affichées. Pas mal dessinées, pas lentes — le visiteur n'a rien reçu là où un compteur devait se trouver.

La cause était une adresse de page de plus de 255 caractères.

La chaîne

La colonne qui enregistre sur quelle page une visite a atterri est un varchar(255). L'adresse est arrivée plus longue. L'insertion a échoué avec SQLSTATE 22001, données trop longues pour la colonne, ce qui lève une exception dans ce code.

Et l'écriture de la statistique a lieu avant le dessin de l'image. L'exception n'a donc pas seulement perdu une ligne de statistiques. Elle a interrompu la requête, et cette requête était précisément celle qui produit l'image du compteur. Une page à l'adresse longue cassait son propre compteur, en silence, pour chaque visiteur.

Les adresses longues n'ont rien d'exotique. Une galerie aux chemins imbriqués, une boutique avec une douzaine de paramètres de suivi ajoutés par une régie, une page de résultats de recherche — chacune franchit 255 caractères sans effort.

Le correctif, et celui qui n'a pas été retenu

L'adresse est désormais coupée à la largeur de la colonne avant l'insertion. D'une adresse très longue, vingt caractères manquent dans la liste des pages ; rien d'autre ne change.

L'alternative était d'élargir la colonne. Elle a été écartée : il n'existe pas de largeur qu'on ne puisse dépasser, et choisir un nombre plus grand ne fait qu'éloigner la même panne là où elle sera plus difficile à reconnaître le jour venu. Le mode de défaillance doit cesser d'être fatal, pas devenir plus rare.

Envelopper l'insertion dans un try/catch aurait aussi corrigé le symptôme visible, et aurait été pire : le compteur se dessinerait, la ligne disparaîtrait discrètement, et il manquerait à jamais dans la liste des pages exactement celles aux adresses les plus compliquées, sans trace nulle part.

Deux choses à retenir

Une entrée venue de l'extérieur se coupe à la largeur de la colonne, on n'espère pas qu'elle rentre. Tout ce qui arrive du dehors — une adresse, une provenance, une identification de navigateur, un titre — est aussi long que quelqu'un d'autre en a décidé, et la base de données a là-dessus un avis qu'elle exprime en refusant.

Sachez ce qui dépend encore de votre mode de défaillance. C'était un bug de statistiques dans un service de statistiques, et le dégât visible était une image manquante. L'écriture et le rendu partageaient une requête ; rien dans le code ne disait qu'ils étaient couplés, et rien n'avertissait qu'une insertion ratée emporterait l'image avec elle.

Vingt images cassées en une journée, c'est peu. Cela a été trouvé en lisant des journaux pour tout autre chose, ce qui est la manière habituelle de trouver ces cas et la raison de continuer à les lire.

Publicité