UNSIGNEDvaria de 0a n, enquanto o sinalizado varia de aproximadamente -n/2a n/2.
Nesse caso, você tem uma AUTO_INCREMENTcoluna de ID, portanto, não terá negativos. Portanto, use UNSIGNED. Se você não usar UNSIGNEDpara a AUTO_INCREMENTcoluna, seu valor máximo possível será a metade maior (e a metade negativa do intervalo de valores não será usada).
Observe, entretanto, que isso UNSIGNEDé específico do MySQL e não um recurso SQL padrão. Isso significa que o uso UNSIGNEDpode tornar uma migração futura para um RDBMS diferente mais complicada ou causar dificuldades ao usar bibliotecas de software voltadas para SQL padrão, como SQLAlchemy. Acho que isso deve ser parte da resposta.
Basicamente com UNSIGNED, você está se dando o dobro de espaço para o número inteiro, já que especifica explicitamente que não precisa de números negativos (geralmente porque os valores que você armazena nunca serão negativos).
A verdade é que o primeiro bit é usado para representar o sinal. Mas 1 é para valores negativos e 0 é para valores positivos. Mais valores negativos são codificados de maneira diferente (complemento de dois). Exemplo com TINYINT:
The sign bit
|10000000b =-128d
...11111101b =-3d
11111110b =-2d
11111111b =-1d
00000000b =0d
00000001b =1d
00000010b =2d
...01111111b =127d
Para valores inteiros negativos, SIGNEDé usado e para valores inteiros não negativos, UNSIGNEDé usado. Sempre sugeriu usar UNSIGNEDpara id como uma CHAVE PRIMÁRIA.
Uma coisa que eu gostaria de adicionar, In a signed int, que é o default value in mysql, 1 bitserá usado para representar sign. -1 for negative and 0 for positive.
Portanto, se seu aplicativo inserir apenas valores positivos, é melhor especificar não assinado.
Se você souber o tipo de número que armazenará, poderá escolher de acordo. Neste caso, você tem 'id', que nunca pode ser negativo. Portanto, você pode usar o int sem sinal. Intervalo de int com sinal: -n / 2 a + n / 2 Intervalo de int sem sinal: 0 a n Portanto, você tem o dobro do número de números positivos disponíveis. Escolha de acordo.
Acho que UNSIGNEDseria a melhor opção armazenar algo como time_duration(Ex:) resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)valor em minutos ou horas ou segundos no formato, que definitivamente será um número não negativo
Respostas:
UNSIGNED
armazena apenas números positivos (ou zero). Por outro lado, assinado pode armazenar números negativos (ou seja, pode ter um sinal negativo ).Aqui está uma tabela dos intervalos de valores que cada
INTEGER
tipo pode armazenar:Fonte: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
varia de0
an
, enquanto o sinalizado varia de aproximadamente-n/2
an/2
.Nesse caso, você tem uma
AUTO_INCREMENT
coluna de ID, portanto, não terá negativos. Portanto, useUNSIGNED
. Se você não usarUNSIGNED
para aAUTO_INCREMENT
coluna, seu valor máximo possível será a metade maior (e a metade negativa do intervalo de valores não será usada).fonte
UNSIGNED
é específico do MySQL e não um recurso SQL padrão. Isso significa que o usoUNSIGNED
pode tornar uma migração futura para um RDBMS diferente mais complicada ou causar dificuldades ao usar bibliotecas de software voltadas para SQL padrão, como SQLAlchemy. Acho que isso deve ser parte da resposta.Use
UNSIGNED
para números inteiros não negativos.fonte
Basicamente com
UNSIGNED
, você está se dando o dobro de espaço para o número inteiro, já que especifica explicitamente que não precisa de números negativos (geralmente porque os valores que você armazena nunca serão negativos).fonte
Não concordo com o vipin cp .
A verdade é que o primeiro bit é usado para representar o sinal. Mas 1 é para valores negativos e 0 é para valores positivos. Mais valores negativos são codificados de maneira diferente (complemento de dois). Exemplo com TINYINT:
fonte
Para valores inteiros negativos,
SIGNED
é usado e para valores inteiros não negativos,UNSIGNED
é usado. Sempre sugeriu usarUNSIGNED
para id como uma CHAVE PRIMÁRIA.fonte
Uma coisa que eu gostaria de adicionar, In a
signed int
, que é odefault value in mysql
,1 bit
será usado para representarsign
.-1 for negative and 0 for positive.
Portanto, se seu aplicativo inserir apenas valores positivos, é melhor especificar não assinado.fonte
Se você souber o tipo de número que armazenará, poderá escolher de acordo. Neste caso, você tem 'id', que nunca pode ser negativo. Portanto, você pode usar o int sem sinal. Intervalo de int com sinal: -n / 2 a + n / 2 Intervalo de int sem sinal: 0 a n Portanto, você tem o dobro do número de números positivos disponíveis. Escolha de acordo.
fonte
Acho que
UNSIGNED
seria a melhor opção armazenar algo comotime_duration
(Ex:)resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
valor em minutos ou horas ou segundos no formato, que definitivamente será um número não negativofonte