sql >> Database >  >> RDS >> Mysql

negatief getal opslaan in decimaal veld van mysql-tabel vanaf versie 5.0.3

Van wat ik begrijp, zegt de documentatie dat het geen letterlijke . zal opslaan "-" teken , wat betekent dat het nu waarschijnlijk doet wat de andere ondertekende INTEGER-velden altijd hebben gedaan en in plaats daarvan een tekenbit opslaat om negatieve getallen aan te duiden.

Je ziet nog steeds een minteken voor het getal, omdat het wordt gegenereerd door MySQL als resultaat van dat tekenbit.

Als u het tekenbit niet begrijpt, kunt u overwegen hoe een ondertekende byte getallen van -128 tot 127 kan opslaan, terwijl een niet-ondertekende byte getallen van 0 tot 255 kan opslaan. Dat komt omdat een van de 8 bits in een ondertekend getal is wordt gebruikt om +/- op te slaan (1 is negatief, 0 is positief), terwijl de resterende bits getallen tot 2^7 (-128 of 127) bieden.

Als de bits 1111 bijvoorbeeld een tekenbit hadden, zouden ze gelijk zijn aan -7 (negatief+4+2+1), maar als ze niet ondertekend waren, zouden ze gelijk zijn aan 15 (8+4+2+1). Er wordt nog steeds hetzelfde aantal bits opgeslagen.

Je kunt je afvragen waarom de negatieve grens in een getekende getal de 8e bit kan gebruiken, terwijl de positieve grens beperkt is tot de som van de 7 bits (1 minder dan de 8e bit). Dit komt omdat 10000000 tegelijkertijd wordt beschouwd als zowel negatief als de 8e bit, omdat de weergave van -0 anders overbodig is met 00000000 die 0 vertegenwoordigt. Er is geen onderscheid tussen negatieve en positieve nul, dus een negatief meest significante bit is altijd de waarde van dat bit zelf (maar negatief).




  1. Hoe make_interval() werkt in PostgreSQL

  2. SQLite - Zet een tabel neer

  3. MySQL COUNT() meerdere kolommen

  4. MYSQL - Twee tabellen samenvoegen