Una URL larga tumbó el contador
El 9 de agosto de 2026, veinte imágenes de contador no llegaron a dibujarse. No salieron mal, no salieron lentas — el visitante no recibió nada donde debía haber un contador.
La causa fue una dirección de página de más de 255 caracteres.
La cadena
La columna que guarda en qué página aterrizó una visita es varchar(255). La dirección llegó más larga. La inserción falló con SQLSTATE 22001, datos demasiado largos para la columna, lo que en este código lanza una excepción.
Y la escritura de la estadística ocurre antes de dibujar la imagen. Así que la excepción no perdió solo una fila de estadísticas. Abortó la petición, y la petición era justo la que produce la imagen del contador. Una página con dirección larga rompía su propio contador, en silencio, para todos los visitantes.
Las direcciones largas no son exóticas. Una galería con rutas anidadas, una tienda con una docena de parámetros de seguimiento añadidos por una plataforma publicitaria, una página de resultados de búsqueda — cualquiera de ellas supera los 255 caracteres sin esfuerzo.
El arreglo, y el que no se eligió
Ahora la dirección se recorta al ancho de la columna antes de insertarla. De una dirección larguísima se pierden veinte caracteres en la lista de páginas; nada más cambia.
La alternativa era ensanchar la columna. Se descartó: no hay ancho que no pueda superarse, y elegir un número mayor solo aleja el mismo fallo hasta donde será más difícil reconocerlo cuando llegue. El modo de fallo tiene que dejar de ser fatal, no volverse más raro.
Envolver la inserción en un try/catch también habría arreglado el síntoma visible, y habría sido peor: el contador se dibujaría, la fila desaparecería en silencio, y a la lista de páginas le faltarían para siempre exactamente las páginas con las direcciones más complicadas, sin rastro en ningún registro.
Dos cosas para llevarse
La entrada ajena se recorta al ancho de la columna, no se confía en que quepa. Todo lo que llega de fuera — una dirección, una procedencia, un identificador de navegador, un título — es tan largo como haya decidido otro, y la base de datos tiene una opinión al respecto que expresa negándose.
Ten claro qué más cuelga de tu modo de fallo. Esto era un fallo de estadísticas en un servicio de estadísticas, y el daño visible fue una imagen que faltaba. La escritura y el dibujado compartían petición; nada en el código decía que estuvieran acoplados, y nada avisaba de que una inserción fallida se llevaría la imagen consigo.
Veinte imágenes rotas en un día es poco. Se encontró leyendo registros por algo completamente distinto, que es la manera habitual de encontrar estas cosas y la razón de seguir leyéndolos.