En sidadress längre än sin kolumn
Den 9 augusti 2026 kunde tjugo räknarbilder inte visas. Inte felritade, inte långsamt ritade — besökaren fick ingenting alls där en räknare skulle ha funnits.
Orsaken var en sidadress som var längre än 255 tecken. Den kortas nu av redan när den skrivs, och räknarbilden är inte längre beroende av längden på den adress den får veta.
Kedjan
Kolumnen som lagrar vilken sida ett besök landade på är varchar(255). Adressen kom in längre än så. Infogningen misslyckades med SQLSTATE 22001, data too long for column, vilket i den här koden utlöste ett undantag.
Och statistiken skrivs innan bilden ritas. Undantaget förlorade alltså inte bara en rad statistik. Det avbröt anropet, och det var just det anropet som skapar räknarbilden. En sida med en lång adress förstörde sin egen räknare, i tysthet, för varje besökare.
Långa adresser är inget exotiskt. Ett galleri med nästlade sökvägar, en butik med ett dussin spårningsparametrar som en annonsplattform har lagt till, en sökresultatsida — vilken som helst av dem passerar 255 tecken utan att anstränga sig.
Lösningen, och lösningen som inte valdes
Adressen kapas nu till kolumnens bredd före infogningen. Tjugo tecken av en mycket lång URL försvinner ur sidlistan; inget annat ändras.
Alternativet var att bredda kolumnen. Det valdes bort: det finns ingen bredd som inte kan överskridas, och att välja ett större tal flyttar bara samma fel längre bort, där det blir svårare att känna igen när det väl kommer. Felet måste sluta vara ödesdigert, inte bli ovanligare.
Att lägga infogningen i en try/catch hade också åtgärdat det synliga symptomet, och det hade varit sämre: räknaren skulle ritas, raden skulle tyst försvinna, och sidlistan skulle sakna just sidorna med de mest komplicerade adresserna, för alltid, utan ett spår i någon logg.
Två saker att ta med sig
Indata utifrån ska kortas till kolumnens bredd, inte förväntas få plats. Allt som kommer utifrån — en adress, en hänvisning, en user agent, en titel — är så långt som någon annan har bestämt, och databasen har en åsikt om det som den uttrycker genom att vägra.
Vet vad mer som ligger nedströms från ett fel. Det här var en statistikbugg i en statistiktjänst, och den synliga skadan var en saknad bild. Skrivningen och ritningen delade ett anrop; ingenting i koden sa att de hängde ihop, och ingenting varnade för att en misslyckad infogning skulle ta bilden med sig.
Tjugo trasiga bilder på en dag är lite. Felet hittades när loggarna lästes för något helt annat, vilket är det vanliga sättet sådant hittas på, och skälet till att fortsätta läsa dem.