¿Cuándo debo usar INT NO FIRMADO y FIRMADO en MySQL?


Respuestas:


164

UNSIGNEDsolo almacena números positivos (o cero). Por otro lado, con signo puede almacenar números negativos (es decir, puede tener un signo negativo ).

Aquí hay una tabla de los rangos de valores que cada INTEGERtipo puede almacenar:

Tipos y longitudes de MySQL INTEGER
Fuente: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html

UNSIGNEDvaría de 0a n, mientras que con signo varía de aproximadamente -n/2a n/2.

En este caso, tiene una AUTO_INCREMENTcolumna de ID, por lo que no tendría negativos. Por lo tanto, use UNSIGNED. Si no lo usa UNSIGNEDpara la AUTO_INCREMENTcolumna, su valor máximo posible será la mitad de alto (y la mitad negativa del rango de valores no se usará).


14
Sin embargo, tenga en cuenta que UNSIGNEDes específico de MySQL y no una característica estándar de SQL. Esto significa que el uso UNSIGNEDpuede complicar una futura migración a un RDBMS diferente o causarle dificultades al usar bibliotecas de software dirigidas a SQL estándar, como SQLAlchemy. Creo que esto debería ser parte de la respuesta.
minexew


4

Básicamente con UNSIGNED, te estás dando el doble de espacio para el número entero, ya que especificas explícitamente que no necesitas números negativos (generalmente porque los valores que almacenas nunca serán negativos).


1

No estoy de acuerdo con vipin cp .

Lo cierto es que el primer bit se utiliza para representar el signo. Pero 1 es para valores negativos y 0 para valores positivos. Los valores más negativos se codifican de forma diferente (complemento a 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  

1

Para valor entero negativo, SIGNEDse usa y para valor entero no negativo, UNSIGNEDse usa. Siempre sugirió usar UNSIGNEDfor id como CLAVE PRIMARIA.


0

Una cosa que me gustaría agregar en a signed int, que es default value in mysql, 1 bitse usará para representar sign. -1 for negative and 0 for positive. Entonces, si su aplicación inserta solo un valor positivo, es mejor especificar unsigned.


0

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. Entonces 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.


0

Creo que UNSIGNEDsería la mejor opción almacenar algo como time_duration(Ej .:) resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)valor en formato de minutos, horas o segundos, que definitivamente será un número no negativo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.