λαθος καταχωρηση σε βδ

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

λαθος καταχωρηση σε βδ

Δημοσίευση από korgr » 09 Σεπ 2011 18:12

Τα τηλέφωνα καλό είναι να είναι varchar γιατί ο άλλος μπορεί να θέλει να καταχωρήσει το +30210 3457900 (με κενό και με international μορφή)

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

λαθος καταχωρηση σε βδ

Δημοσίευση από pimpogio » 09 Σεπ 2011 19:48

για να καταλαβεις τι εγινε δες εδω
http://dev.mysql.com/doc/refman/5.1/en/ ... rflow.html

Η mysql δεν κανει rollback το query απλως βαζει ως τιμη την overflow value
Αυτο μπορει να διαδωσει χοντρα bugs χωρις να το παρεις χαμπαρι και να γινει ζημια αν δεν προσεχεις

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

λαθος καταχωρηση σε βδ

Δημοσίευση από Rapid-eraser » 09 Σεπ 2011 20:43

Να κάνω κάποιες επισημάνσεις όσων αφορά το INT(10) της mySQL προς αποφυγήν παρεξηγήσεων.

Καταρχήν ο τύπος INT έρχεται σε 2 μορφές singed και unsigned (όπως και όλες οι αριθμητικές μονάδες της mySQL)

To range του INT είναι (σε ένα 32bit σύστημα):
SINGED -2147483648 έως 2147483647
UNSIGNED 0 to 4294967295

Οτιδήποτε μεγαλύτερο ή μικρότερο δημιουργεί out-of-range error (overflow ή underflow αντίστοιχα) και περιγράφετε αναλυτικά τι θα κάνει στην σελίδα που έδωσε ο pimpogio πιο πάνω.
Και όπως γράφει δεν βάζει overflow value αλλά το max boundary μέσω rounding, το rollback δεν ξέρω που το βρήκες ακριβώς :P


To ΙΝΤ(2) πχ δεν επηρεάζει την ικανότητα αποθήκευσης σε ένα INT πεδίων τιμών πάνω από διψήφιους αριθμούς. Αυτό σημαίνει ότι σε ένα INT(2) μπορείς απροβλημάτιστα να αποθηκεύσεις τον αριθμό 1500. Το ΙΝΤ(2) σημαίνει πως αν χρειαστείς κάποιο padding με 0 (όπως το ZEROFILL) θα κοιτάξει η mySQL να φορμάρει τον αριθμό μέχρι το πεδίο που θα του πεις.

Αυτό σημαίνει πως μπορείς να ορίσεις και INT(20) , δεν μπορείς όμως να αποθηκεύσεις INT 20 χαρακτήρων :P (το INT είπαμε έχει fixed length) αλλά ένα ΙΝΤ που θα κάνει padding όταν χρειαστεί σε 20 χαρακτήρες μέγεθος.

Συμπέρασμα το INT δεν είναι είναι αρκετό για αποθηκεύσεις σαν αριθμό ένα δεκαψήφιο τηλέφωνο.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

stavroula_apo
Δημοσιεύσεις: 121
Εγγραφή: 18 Σεπ 2010 03:12

λαθος καταχωρηση σε βδ

Δημοσίευση από stavroula_apo » 11 Σεπ 2011 20:01

Σας ευχαριστώ πολύ! όντως ο αριθμός τηλεφώνου που μου αποθήκευε ήταν συνέχεια 2147483647. Τώρα καταλαβαίνω και εγώ γιατί.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες