Γράφω πρώτα το συμπέρασμα, για όποιον βαριέται να διαβάσει το υπόλοιπο κείμενο:
Αποθηκεύστε τους τηλεφωνικούς αριθμούς ως
VARCHAR(20)
, εκτός και αν υπάρχει σημαντικός λόγος γιατί να κάνετε
κάτι διαφορετικό. Επιπλέον, χρησιμοποιήστε κώδικα σε επίπεδο εφαρμογής για 2
ενέργειες: Α. για να αφαιρέσετε από την είσοδο του χρήστη οποιουσδήποτε μη
αριθμητικούς χαρακτήρες, πριν από την εισαγωγή στη βάση (π.χ. παύλες, κενά,
παρενθέσεις), και Β. για να μορφοποιήσετε τον αριθμό με μη αριθμητικούς
χαρακτήρες, πριν από την έξοδο στο χρήστη, ώστε να βελτιώσετε την
αναγνωσιμότητα (π.χ. με παύλες, κενά, παρενθέσεις).
Κατ' αρχήν, το μήκος=20 προέρχεται από τη σύσταση Ε.164 του ITU-T, η οποία καθορίζει το μέγιστο μήκος των τηλεφωνικών αριθμών σε 15 αριθμητικούς χαρακτήρες, μη συμπεριλαμβανομένου του προθέματος διεθνούς κλήσης, το μέγιστο από τα οποία είναι 5 χαρακτήρες.
Ο λόγος που προτείνω το VARCHAR αντί κάποιου αριθμητικού τύπου της MySQL είναι γιατί:
- Οι τηλεφωνικοί αριθμοί, δεν λογίζονται ως ακέραιοι, με την έννοια ότι:
- δεν πρόκειται ποτέ να εκτελέσετε πάνω τους αριθμητικές πράξεις, και
- δεν έχει νόημα η ταξινόμησή τους κατά μέγεθος, δηλαδή δεν νοείται «μεγαλύτερος» και «μικρότερος» αριθμός τηλεφώνου.
- Σε μερικές χώρες, ένας τοπικός αριθμός τηλεφώνου μπορεί να ξεκινάει από μηδέν. Μερικές (ή όλες;) μηχανές αποθήκευσης στη MySQL θα αποκόψουν τα μηδενικά που προηγούνται ενός αριθμού, όταν αυτός αποθηκεύεται ως ακέραιος.
- Τέλος, η διαφορά στο μέγεθος της τελικής αποθηκευμένης πληροφορίας, είναι ασήμαντη, για τόσο μικρά κομμάτια πληροφορίας.
Χρησιμοποιώντας VARCHAR(20) για αποθήκευση τηλεφωνικών αριθμών, υποχρεωτικά θα χρησιμοποιήσετε επιπλεόν κώδικα σε επίπεδο εφαρμογής για να καθαρίσετε την είσοδο του χρήστη από μη αριθμητικούς χαρακτήρες (αλλιώς μπορεί να ξεφύγει στο μήκος), και προεραιτικά για να ομορφύνετε τον τηλεφωνικό αριθμό στην έξοδο.
Σημειώστε ότι, παρόμοιο σκεπτικό ισχύει και την αποθήκευση Ταχυδρομικού Κώδικα, πόσω μάλλον που μερικές χώρες (π.χ. Ηνωμένο Βασίλειο, Καναδάς) χρησιμοποιούν και γράμματα του αλφαβήτου στους Τ.Κ.