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:
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á).
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.
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).
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:
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.
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.
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
Respuestas:
UNSIGNED
solo 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
INTEGER
tipo puede almacenar:Fuente: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
varía de0
an
, mientras que con signo varía de aproximadamente-n/2
an/2
.En este caso, tiene una
AUTO_INCREMENT
columna de ID, por lo que no tendría negativos. Por lo tanto, useUNSIGNED
. Si no lo usaUNSIGNED
para laAUTO_INCREMENT
columna, su valor máximo posible será la mitad de alto (y la mitad negativa del rango de valores no se usará).fuente
UNSIGNED
es específico de MySQL y no una característica estándar de SQL. Esto significa que el usoUNSIGNED
puede 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.Úselo
UNSIGNED
para números enteros no negativos.fuente
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).fuente
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:
fuente
Para valor entero negativo,
SIGNED
se usa y para valor entero no negativo,UNSIGNED
se usa. Siempre sugirió usarUNSIGNED
for id como CLAVE PRIMARIA.fuente
Una cosa que me gustaría agregar en a
signed int
, que esdefault value in mysql
,1 bit
se usará para representarsign
.-1 for negative and 0 for positive.
Entonces, si su aplicación inserta solo un valor positivo, es mejor especificar unsigned.fuente
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.
fuente
Creo que
UNSIGNED
sería la mejor opción almacenar algo comotime_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 negativofuente