Mysql
 sql >> Database >  >> RDS >> Mysql

memorizzazione del numero negativo nel campo decimale della tabella mysql a partire dalla versione 5.0.3

Da quanto ho capito, la documentazione dice che non memorizzerà un letterale "-" carattere , il che significa che probabilmente ora sta facendo ciò che gli altri campi INTEGER con segno hanno sempre fatto e sta invece memorizzando un bit di segno per denotare numeri negativi.

Stai ancora vedendo un segno meno prima del numero perché è stato generato da MySQL come risultato di quel bit di segno.

Se non capisci il bit del segno, puoi considerare come un byte con segno può memorizzare numeri da -128 a 127, mentre un byte senza segno può memorizzare numeri da 0 a 255. Questo perché uno degli 8 bit in un numero con segno è utilizzato per memorizzare +/- (1 è negativo, 0 è positivo), mentre i bit rimanenti offrono numeri fino a 2^7 (-128 o 127).

Quindi, ad esempio, se i bit 1111 avessero un bit di segno sarebbero uguali a -7 (negativo+4+2+1), ma se fossero privi di segno sarebbero uguali a 15 (8+4+2+1). È sempre la stessa quantità di bit archiviata.

Potresti chiederti perché il limite negativo in un numero con segno può utilizzare l'8° bit, mentre il limite positivo è limitato alla somma dei 7 bit (1 in meno dell'8° bit). Questo perché 10000000 è considerato sia negativo che 8° bit contemporaneamente, perché la sua rappresentazione di -0 altrimenti è ridondante con 00000000 che rappresenta 0. Non c'è distinzione tra zero negativo e positivo, quindi un bit più significativo negativo è sempre il valore di quel bit stesso (ma negativo).