mysql - number - tiny int 1
¿Cuándo debo usar UNSIGNED y SIGNED INT en MySQL? (7)
¿Cuándo debo usar UNSIGNED y SIGNED INT en MySQL? ¿Qué es mejor usar o esto es solo preferencia personal? Porque lo he visto usado así;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
y
id INT(11) NOT NULL AUTO_INCREMENT
Básicamente, con UNSIGNED
, te estás dando el doble de espacio al entero, ya que especificas explícitamente que no necesitas números negativos (generalmente porque los valores que almacenas nunca serán negativos).
Creo que UNSIGNED
sería la mejor opción para almacenar algo como time_duration
(Ej .: time_duration
resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
time_duration
( resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
) en formato de minutos u horas o segundos que definitivamente será un número no negativo
No estoy de acuerdo con vipin cp .
Lo cierto es que el primer bit se utiliza para representar el signo. Pero 1 es para negativo y 0 para valores positivos. Más sobre los valores negativos se codifican de manera diferente (complemento de dos). Ejemplo 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
Si conoce el tipo de números que va a almacenar, puede elegir en consecuencia. En este caso tienes un ''id'' que nunca puede ser negativo. Así que puedes usar unsigned int. Rango de int con signo: -n / 2 a + n / 2 Rango de int sin signo: 0 a n Por lo tanto, tiene el doble de números positivos disponibles. Elija en consecuencia.
Una cosa que me gustaría agregar En un signed int
, que es el default value in mysql
, se usará 1 bit
para representar el sign
. -1 for negative and 0 for positive.
Entonces, si su aplicación solo inserta un valor positivo, debería especificar sin firmar.
Utilice UNSIGNED
para enteros no negativos.
UNSIGNED
solo almacena números positivos (o cero). Por otro lado, firmado puede almacenar números negativos (es decir, puede tener un signo negativo).
Aquí hay una tabla de los rangos de valores que cada tipo de INTEGER
puede almacenar:
Fuente: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
rangos UNSIGNED
de 0
a n
, mientras que los rangos con signo van desde aproximadamente -n/2
a n/2
.
En este caso, tiene una columna de ID AUTO_INCREMENT
, por lo que no tendría negativos. Por lo tanto, utilice UNSIGNED
. Si no usa UNSIGNED
para la columna AUTO_INCREMENT
, su valor máximo posible será la mitad de alto (y la mitad negativa del rango de valores no se usará).