Επικοινωνία με την υποστήριξη

Απαντάμε μέσω e-mail, συνήθως μέσα σε δύο ημέρες.

Το Google reCAPTCHA ελέγχει αυτή την υποβολή για κατάχρηση· δεδομένα αποστέλλονται στην Google. Το script φορτώνεται μόνο όταν ανοίξει αυτή η φόρμα.

← Όλα τα άρθρα

Μια διεύθυνση σελίδας μεγαλύτερη από τη στήλη της

Στις 9 Αυγούστου 2026, είκοσι εικόνες μετρητή δεν εμφανίστηκαν. Δεν σχεδιάστηκαν λάθος ούτε αργά — ο επισκέπτης δεν έβλεπε απολύτως τίποτα εκεί όπου έπρεπε να υπάρχει μετρητής.

Η αιτία ήταν μια διεύθυνση σελίδας μεγαλύτερη από 255 χαρακτήρες. Πλέον περικόπτεται τη στιγμή της εγγραφής, και η εικόνα του μετρητή δεν εξαρτάται πια από το μήκος της διεύθυνσης που της αναφέρεται.

Η αλυσίδα

Η στήλη που αποθηκεύει σε ποια σελίδα κατέληξε μια επίσκεψη είναι varchar(255). Η διεύθυνση έφτασε μεγαλύτερη από αυτό. Η εισαγωγή απέτυχε με SQLSTATE 22001, δεδομένα πολύ μεγάλα για τη στήλη, κάτι που σε αυτόν τον κώδικα προκαλούσε εξαίρεση.

Και η εγγραφή των στατιστικών γίνεται πριν σχεδιαστεί η εικόνα. Έτσι η εξαίρεση δεν έχασε απλώς μία γραμμή στατιστικών. Διέκοψε το αίτημα, και το αίτημα ήταν αυτό που παράγει την εικόνα του μετρητή. Μια σελίδα με μεγάλη διεύθυνση χαλούσε τον δικό της μετρητή, αθόρυβα, για κάθε επισκέπτη.

η στήληvarchar(255)η εισαγωγή αποτυγχάνειSQLSTATE 22001εξαίρεσηδιακόπτει το αίτημαο επισκέπτης δεν βλέπει εικόνα μετρητή

Οι μεγάλες διευθύνσεις δεν είναι κάτι εξωτικό. Μια συλλογή με ένθετες διαδρομές, ένα κατάστημα με μια ντουζίνα παραμέτρους παρακολούθησης που πρόσθεσε μια διαφημιστική πλατφόρμα, μια σελίδα αποτελεσμάτων αναζήτησης — οποιαδήποτε από αυτές ξεπερνά τους 255 χαρακτήρες χωρίς καμία προσπάθεια.

Η διόρθωση, και η διόρθωση που δεν επιλέχθηκε

Η διεύθυνση κόβεται πλέον στο πλάτος της στήλης πριν από την εισαγωγή. Είκοσι χαρακτήρες ενός πολύ μεγάλου URL χάνονται από τη λίστα σελίδων· τίποτε άλλο δεν αλλάζει.

Η εναλλακτική ήταν να διευρυνθεί η στήλη. Απορρίφθηκε: δεν υπάρχει πλάτος που να μην μπορεί να ξεπεραστεί, και η επιλογή ενός μεγαλύτερου αριθμού απλώς μετακινεί την ίδια αποτυχία πιο μακριά, όπου θα είναι πιο δύσκολο να την αναγνωρίσει κανείς όταν έρθει. Η αποτυχία πρέπει να πάψει να είναι μοιραία, όχι να γίνει σπανιότερη.

Αν η εισαγωγή είχε τυλιχτεί σε ένα try/catch, θα είχε διορθωθεί κι έτσι το ορατό σύμπτωμα, αλλά θα ήταν χειρότερο: ο μετρητής θα σχεδιαζόταν, η γραμμή θα εξαφανιζόταν αθόρυβα, και από τη λίστα σελίδων θα έλειπαν ακριβώς οι σελίδες με τις πιο περίπλοκες διευθύνσεις, για πάντα, χωρίς τίποτα σε κανένα αρχείο καταγραφής.

Δύο πράγματα που αξίζει να κρατήσετε

Τα δεδομένα που έρχονται απ’ έξω πρέπει να περικόπτονται στο πλάτος της στήλης, όχι να ελπίζουμε ότι θα χωρέσουν. Ό,τι έρχεται απ’ έξω — μια διεύθυνση, μια σελίδα παραπομπής, ένας user agent, ένας τίτλος — έχει όσο μήκος αποφάσισε κάποιος άλλος, και η βάση δεδομένων έχει άποψη γι’ αυτό, την οποία εκφράζει αρνούμενη.

Να ξέρετε τι άλλο εξαρτάται από ένα σημείο που μπορεί να αποτύχει. Αυτό ήταν ένα σφάλμα στατιστικών σε μια υπηρεσία στατιστικών, και η ορατή ζημιά ήταν μια εικόνα που έλειπε. Η εγγραφή και η σχεδίαση μοιράζονταν ένα αίτημα· τίποτα στον κώδικα δεν έλεγε ότι ήταν συνδεδεμένες, και τίποτα δεν προειδοποιούσε ότι μια αποτυχημένη εισαγωγή θα έπαιρνε μαζί της και την εικόνα.

Είκοσι χαλασμένες εικόνες σε μία ημέρα είναι λίγες. Βρέθηκαν διαβάζοντας τα αρχεία καταγραφής για κάτι εντελώς άλλο, που είναι ο συνηθισμένος τρόπος να βρίσκονται τέτοια πράγματα, και ο λόγος να συνεχίζει κανείς να τα διαβάζει.

Διαφήμιση