Error 1264: out of range value for column - fix

In MySql ho impostato una colonna come tipo intero (integer) di lunghezza 10, in questo modo:

my_column integer(10) NOT NULL,

non appena però cerco d'inserire un valore all'interno di questo campo con una insert in questo modo:

INSERT INTO my_Table (my_column) VALUES ('3235977883');

ottengo questo messaggio di errore da parte di MySql:

`error 1264` out of value for column

Come mai compare questo errore? Non mi sembra che vi siano errori nella insert né tanto meno nella dichiarazione del tipo, qualcuno potrebbe aiutarmi, grazie.

Risolta 2
MySql 08-03-2020 2 Risposte 1726 Visite +2
Alfonso Scifella

Alfonso Scifella

Autore di questa domanda

Risposte ( 2 approvate )

  1. Michele Ladonia
    +1
    08-03-2020 16:11:05
    Rispondi

    il valore che tu stai cercando d'inserire 3235977883 è più grande del massimo valore accettabile per il tipo intero INT in MySql che è 2147483647.

     

    Ecco perché ricevi quell'errore 1264 di "out of value", perché eccedi la dimensione massima. Per risolvere l'errore potresti contrassegnare il tuo campo INT con UNSIGNED così da raddoppiare il limite massimo superiore accettabile, che diverrebbe di 4294967295, oppure dovresti utilizzare il tipo BIG INT, però fai attenzione nella scelta di quest'ultimo poiché se non necessario andresti a sprecare un sacco di memoria.

  2. Giacomo Barrile
    0
    08-03-2020 16:18:16
    Rispondi

    Il perché dell'errore 1264 è proprio quello indicato da Michele Ladonia, potrei ulteriormente suggerire di utilizzare eventualmente anche un campo stringa piuttosto che un big int, a meno che tu non stia realizzando un applicativo di tipo scientifico mi sembra improbabile che tu abbia esigenze di trattare numeri così grandi, probabilmente si tratta di un numero telefonico che puoi trattare benissimo come una stringa (una sequenza di caratteri alfanumerici) con il tipo VARCHAR, ed evitarè così uno spreco enorme di memoria di archiviazione del dato.

     

    Inoltre quando dichiari il tipo INT e ne specifichi il valore 10, integer(10), quel 10 non sta ad indicare la dimensione dell'intero, piuttosto rappresenta la sua 'larghezza' di visualizzazione o rappresentazione se preferisci, facciamo attenzione a non confondere le due cose, errore che vedo fare molto spesso.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

 Domanda Precedente

 Elenco Domande 

Domanda Successiva