Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Tipo campo numerico

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    147

    Tipo campo numerico

    Ho una tabella con un campo "cellulare" dove ho assegnato il tipo "INT"
    Ma dal form di inserimento quando inserisco un numero di cellulare ad esempio 3322233322
    nel db mi trovo questo numero:
    2147483647

    anche se metto un altro numero di cellulare mi inserisce sempre nel db quel numero 2147....

    Solo se metto un numero più corto (ad esempio di 6 cifre) mi inserisce i numeri corretti, ma non esistono numeri di cellulare così corti. Come lunghezza del campo ho messo 15 caratteri.

    Dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Nel formato del campo, non devi usare un int ma un varchar(11)
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  3. #3
    Corretto usare un campo varchar. Magari anche piu' ampio di 11 caratteri.

    Il perche' e' facilmente intuibile. Il numero di telefono non e' un valore numerico, ma una stringa composta da numeri. il campo INT e' numerico e conta, se unsigned, fino a 4 miliardi e spingi. Quindi al massimo 10 cifre ed e' un campo di lunghezza fissa. Cioe' 4 byte.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Puoi anche usare un BIGINT UNSIGNED così da coprire il range da 1 a 123456789123456789

  5. #5
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Quote Originariamente inviata da cronenborg Visualizza il messaggio
    Puoi anche usare un BIGINT UNSIGNED così da coprire il range da 1 a 123456789123456789
    No, è comunque sbagliato utilizzare un campo di tipo numerico per i numeri di telefono (indipendentemente dalla loro lunghezza)
    I numero telefonici possono avere un prefisso che comincia con 0 (es: 02 12344567) ed in un campo numerico lo 0 iniziale viene tagliato
    Se vuoi inserire anche il prefisso internazionale avrai tipicamente qualcosa del tipo +39 123 4567895 ed in un campo numerico il + non lo inserisci

  6. #6
    Quote Originariamente inviata da comas17 Visualizza il messaggio
    No, è comunque sbagliato utilizzare un campo di tipo numerico per i numeri di telefono (indipendentemente dalla loro lunghezza)
    I numero telefonici possono avere un prefisso che comincia con 0 (es: 02 12344567) ed in un campo numerico lo 0 iniziale viene tagliato
    Se vuoi inserire anche il prefisso internazionale avrai tipicamente qualcosa del tipo +39 123 4567895 ed in un campo numerico il + non lo inserisci
    Giusto, ma si parlava di cellularie senza prefissi internazionali e lume70 sembrava veramente intenzionato a rimanere sui campi numerici.
    Comunque io uso VARCHAR(20) per i numeri di telefono per avere la sicurezza di non troncare nulla

  7. #7
    Io userei un CHAR, visto che credo che la lunghezza possa variare solo di un paio di cifre (VARCHAR comporta sempre un overhead).

    Comunque il tuo problema fa capire che NON bisogna mai mantenere l'SQL Mode di default di MySQL, ma sempre impostarlo nel modo più restrittivo possibile. Altrimenti MySQL fa finta di fare quello che le chiedi, e dopo un po' scopri che ti ha preso per i fondelli e hai le tabelle piene di valori-spazzatura che non hanno significato. Come minimo, usa:

    SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,ERROR_FOR_D IVISION_BY_ZERO';
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.