sql >> Databasteknik >  >> RDS >> Mysql

lagra negativt tal i decimalfältet i mysql-tabellen från och med version 5.0.3

Vad jag förstår säger dokumentationen att den inte lagrar en bokstavlig "-" tecken , vilket betyder att den förmodligen nu gör vad de andra signerade INTEGER-fälten alltid har gjort och att den lagrar en teckenbit för att beteckna negativa tal istället.

Du ser fortfarande ett minustecken före numret eftersom det genereras av MySQL som ett resultat av den teckenbiten.

Om du inte förstår teckenbiten kan du överväga hur en signerad byte kan lagra nummer från -128 till 127, medan en osignerad byte kan lagra nummer från 0 till 255. Det beror på att en av de 8 bitarna i ett signerat nummer är används för att lagra +/- (1 är negativ, 0 är positiv), medan de återstående bitarna erbjuder nummer upp till 2^7 (-128 eller 127).

Så, till exempel, om bitarna 1111 hade en teckenbit skulle de vara lika med -7 (negativ+4+2+1), men om de var osignerade skulle de vara lika med 15 (8+4+2+1). Det är fortfarande samma antal bitar som lagras.

Du kanske undrar varför den negativa gränsen i ett tecken med tecken kan använda den 8:e biten, medan den positiva gränsen är begränsad till summan av de 7 bitarna (1 mindre än den 8:e biten). Detta beror på att 10000000 anses vara både negativ och 8:e biten samtidigt, eftersom dess representation av -0 annars är redundant med 00000000 som representerar 0. Det finns ingen skillnad mellan negativ och positiv nolla, så en negativ mest signifikant bit är alltid värdet av den biten själv (men negativt).




  1. Lagra bild till databas blob; hämta från db till Picturebox

  2. Mysql-servern på MAMP startar inte

  3. Hur man tar bort hela MySQL-databasen

  4. Oracle Database 21c för Linux-plattformar