O adresă de pagină mai lungă decât coloana ei
Pe 9 august 2026, douăzeci de imagini de contor nu au putut fi afișate. Nu s-au desenat greșit, nici încet — vizitatorul nu a primit absolut nimic acolo unde ar fi trebuit să fie un contor.
Cauza a fost o adresă de pagină mai lungă de 255 de caractere. Acum este scurtată în momentul scrierii, iar imaginea contorului nu mai depinde de lungimea adresei care îi este transmisă.
Lanțul
Coloana care stochează pagina pe care a ajuns o vizită este varchar(255). Adresa a sosit mai lungă de atât. Inserarea a eșuat cu SQLSTATE 22001, date prea lungi pentru coloană, ceea ce în acest cod a generat o excepție.
Iar scrierea statisticilor are loc înainte ca imaginea să fie desenată. Așadar, excepția nu a pierdut doar un rând de statistici. A întrerupt cererea, iar cererea era chiar cea care produce imaginea contorului. O pagină cu o adresă lungă și-a stricat propriul contor, fără niciun semnal, pentru fiecare vizitator.
Adresele lungi nu sunt ceva exotic. O galerie cu căi imbricate, un magazin cu o duzină de parametri de urmărire adăugați de o platformă de publicitate, o pagină cu rezultate de căutare — oricare dintre acestea depășește 255 de caractere fără efort.
Soluția și soluția care nu a fost aleasă
Adresa este acum tăiată la lățimea coloanei înainte de inserare. Din lista de pagini se pierd douăzeci de caractere dintr-un URL foarte lung; nimic altceva nu se schimbă.
Alternativa era lărgirea coloanei. A fost respinsă: nu există lățime care să nu poată fi depășită, iar alegerea unui număr mai mare doar mută aceeași defecțiune mai departe, unde va fi mai greu de recunoscut când va apărea. Defecțiunea trebuie să înceteze să fie fatală, nu să devină mai rară.
Încadrarea inserării într-un try/catch ar fi rezolvat și ea simptomul vizibil și ar fi fost mai rău: contorul s-ar fi desenat, rândul ar fi dispărut discret, iar din lista de pagini ar fi lipsit exact paginile cu cele mai complicate adrese, pentru totdeauna, fără nimic în vreun jurnal.
Două lucruri de reținut
Datele din exterior trebuie tăiate la lățimea coloanei, nu lăsate în speranța că încap. Tot ce vine din exterior — o adresă, o sursă de trimitere, un user agent, un titlu — este atât de lung cât a decis altcineva, iar baza de date are o părere despre asta, pe care o exprimă prin refuz.
Trebuie știut ce mai depinde de o defecțiune. A fost o eroare de statistici într-un serviciu de statistici, iar paguba vizibilă a fost o imagine lipsă. Scrierea și desenarea împărțeau aceeași cerere; nimic din cod nu spunea că sunt legate și nimic nu avertiza că o inserare eșuată va lua și imaginea cu ea.
Douăzeci de imagini stricate într-o zi înseamnă puțin. Problema a fost găsită citind jurnalele pentru cu totul altceva, adică pe calea obișnuită prin care se găsesc astfel de lucruri, și acesta este motivul pentru care merită citite în continuare.