Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern einer negativen Zahl im Dezimalfeld der MySQL-Tabelle ab Version 5.0.3

Soweit ich weiß, sagt die Dokumentation, dass kein Literal gespeichert wird "-" Zeichen , was bedeutet, dass es jetzt wahrscheinlich das tut, was die anderen vorzeichenbehafteten INTEGER-Felder immer getan haben, und stattdessen ein Vorzeichenbit speichert, um negative Zahlen zu bezeichnen.

Sie sehen immer noch ein Minuszeichen vor der Zahl, weil sie von MySQL als Ergebnis dieses Vorzeichenbits generiert wird.

Wenn Sie das Vorzeichenbit nicht verstehen, können Sie sich überlegen, wie ein vorzeichenbehaftetes Byte Zahlen von -128 bis 127 speichern kann, während ein vorzeichenloses Byte Zahlen von 0 bis 255 speichern kann. Das liegt daran, dass eines der 8 Bits in einer vorzeichenbehafteten Zahl ist wird verwendet, um +/- zu speichern (1 ist negativ, 0 ist positiv), während die verbleibenden Bits Zahlen bis zu 2^7 (-128 oder 127) bieten.

Wenn also zum Beispiel die Bits 1111 ein Vorzeichenbit hätten, wären sie gleich -7 (negativ +4+2+1), aber wenn sie vorzeichenlos wären, wären sie gleich 15 (8+4+2+1). Es wird immer noch die gleiche Menge an Bits gespeichert.

Sie fragen sich vielleicht, warum die negative Grenze in einer vorzeichenbehafteten Zahl das 8. Bit verwenden kann, während die positive Grenze auf die Summe der 7 Bits beschränkt ist (1 weniger als das 8. Bit). Dies liegt daran, dass 10000000 gleichzeitig als negativ und als 8. Bit angesehen wird, da seine Darstellung von -0 ansonsten mit 00000000 redundant ist, was 0 darstellt. Es gibt keinen Unterschied zwischen negativer und positiver Null, daher ist ein negatives höchstwertiges Bit immer der Wert von diesem Bit selbst (aber negativ).