Quando dovrei usare UNSIGNED e SIGNED INT in MySQL? Cosa è meglio usare o questa è solo una preferenza personale? Perché l'ho visto usato in questo modo;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
e
id INT(11) NOT NULL AUTO_INCREMENT
Quando dovrei usare UNSIGNED e SIGNED INT in MySQL? Cosa è meglio usare o questa è solo una preferenza personale? Perché l'ho visto usato in questo modo;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
e
id INT(11) NOT NULL AUTO_INCREMENT
Risposte:
UNSIGNED
memorizza solo numeri positivi (o zero). D'altra parte, firmato può memorizzare numeri negativi (cioè, può avere un segno negativo ).
Ecco una tabella degli intervalli di valori che ogni INTEGER
tipo può memorizzare:
Fonte: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
varia da 0
a n
, mentre firmato varia da circa -n/2
a n/2
.
In questo caso, hai una AUTO_INCREMENT
colonna ID, quindi non avresti negativi. Quindi, usa UNSIGNED
. Se non si utilizza UNSIGNED
per la AUTO_INCREMENT
colonna, il valore massimo possibile sarà la metà del valore (e la metà negativa dell'intervallo di valori rimarrebbe inutilizzata).
UNSIGNED
è specifico di MySQL e non è una funzionalità SQL standard. Ciò significa che l'utilizzo UNSIGNED
può rendere più complicata una futura migrazione a un RDBMS diverso o causare difficoltà quando si utilizzano librerie software destinate a SQL standard come SQLAlchemy. Penso che questo dovrebbe essere una parte della risposta.
Utilizzare UNSIGNED
per numeri interi non negativi.
Non sono d'accordo con vipin cp .
Il vero è che il primo bit è usato per rappresentare il segno. Ma 1 è per negativo e 0 è per valori positivi. Inoltre i valori negativi sono codificati in modo diverso (complemento a due). Esempio con TINYINT:
The sign bit
|
1000 0000b = -128d
...
1111 1101b = -3d
1111 1110b = -2d
1111 1111b = -1d
0000 0000b = 0d
0000 0001b = 1d
0000 0010b = 2d
...
0111 1111b = 127d
Per il valore intero negativo, SIGNED
viene utilizzato e per il valore intero non negativo, UNSIGNED
viene utilizzato. Ha sempre suggerito di utilizzare UNSIGNED
per id come CHIAVE PRIMARIA.
Se conosci il tipo di numeri che intendi memorizzare, puoi scegliere di conseguenza. In questo caso hai "id" che non può mai essere negativo. Quindi puoi usare unsigned int. Intervallo di int con segno: da -n / 2 a + n / 2 Intervallo di int senza segno: da 0 a n Quindi hai il doppio del numero di numeri positivi disponibili. Scegli di conseguenza.