Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

armazenando número negativo no campo decimal da tabela mysql a partir da versão 5.0.3


Pelo que entendi, a documentação está dizendo que não armazenará um literal "-" caractere , o que significa que provavelmente agora está fazendo o que os outros campos INTEGER assinados sempre fizeram e está armazenando um bit de sinal para denotar números negativos.

Você ainda está vendo um sinal de menos antes do número porque está sendo gerado pelo MySQL como resultado desse bit de sinal.

Se você não entender o bit de sinal, considere como um byte assinado pode armazenar números de -128 a 127, enquanto um byte não assinado pode armazenar números de 0 a 255. Isso porque um dos 8 bits em um número assinado é sendo usado para armazenar +/- (1 é negativo, 0 é positivo), enquanto os bits restantes oferecem números até 2^7 (-128 ou 127).

Assim, por exemplo, se os bits 1111 tivessem um bit de sinal, seriam iguais a -7 (negativo+4+2+1), mas se não tivessem sinal, seriam iguais a 15 (8+4+2+1). Ainda é a mesma quantidade de bits sendo armazenados.

Você pode se perguntar por que o limite negativo em um número com sinal pode usar o 8º bit, enquanto o limite positivo é limitado à soma dos 7 bits (1 a menos que o 8º bit). Isso ocorre porque 10000000 é considerado negativo e o 8º bit simultaneamente, porque sua representação de -0 é redundante com 00000000 que representa 0. Não há distinção entre zero negativo e positivo, então um bit negativo mais significativo é sempre o valor desse bit em si (mas negativo).