sql >> Databasteknik >  >> RDS >> Mysql

När jag lägger till xx i mysql float-kolumn är det fel resultat, är det en bugg?

Ditt problem har något att göra med hur stort ditt flyttalsvärde är men jag är inte 100% säker på varför. Jag testade att uppdatera en liknande rad med mindre siffror och det fungerade bra. Du bör också avstå från att använda citat när det är möjligt eftersom det kräver extra bearbetning. Se denna SO-fråga:uppdatera en kolumn genom att subtrahera en kolumn värde

Här är min enkla lösning precis som Tim Biegeleisen föreslog:

CREATE TABLE `xxx` (
  `uid` int(11) NOT NULL,
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
  `real_money` float(10,2) NOT NULL ,
  `available_invoice` float(10,2) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

Infoga:

USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);

Uppdatera utan strängar:

update xxx set money = money - 20 where uid = 1234;

Det finns en del udda saker när man räknar med stora flyttalsvärden. Vissa av dessa problem är maskinberoende och är relaterade till vilken typ av processor du har. Läs mer här:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Enligt en annan SO-fråga är flyttalsvärden INTE ett bra sätt att lagra pengar. Skillnaden mellan flytande och decimal datatyp (se det andra svaret).

Det verkar som att använda decimal och numeric datatyper är bäst för pengar-kolumner i mysql.




  1. SQL Server:Hur man väljer alla dagar i ett datumintervall även om det inte finns någon data på några dagar

  2. VÄLJ IN med Oracle

  3. Generera flera rader från en enda rad baserat på datum

  4. CONTAINSTABLE jokertecken misslyckas vid frasmatchning?