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

Når jeg tilføjer xx til mysql float kolonne, er det forkert resultat, er det en fejl?

Dit problem har noget at gøre med, hvor stor din floating point-værdi er, men jeg er ikke 100% sikker på hvorfor. Jeg testede at opdatere en lignende række med mindre tal, og det fungerede fint. Du bør også undlade at bruge tilbud, hvor det er muligt, da det kræver ekstra behandling. Se dette SO-spørgsmål:opdater en kolonne ved at trække en kolonne fra værdi

Her er min nemme løsning, ligesom Tim Biegeleisen foreslog:

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;

Indsæt:

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

Opdatering uden strenge:

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

Der er nogle mærkelige ting, når man regner med store flydende kommaværdier. Nogle af disse problemer er maskinafhængige og er relateret til, hvilken type processor du har. Læs mere her:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Også ifølge et andet SO-spørgsmål er flydende pointværdier IKKE en god måde at opbevare pengeværdier på. Forskel mellem flydende og decimal datatype (se det andet svar).

Det ser ud til at bruge decimal og numeric datatyper er bedst for penge-kolonner i mysql.




  1. MySQL-tabel er markeret som nedbrudt, og sidste (automatiske?) reparation mislykkedes

  2. Hvordan får man kun jsonb af specifikke nøgler fra postgres?

  3. Sådan fungerer FROM_UNIXTIME() i MariaDB

  4. SQLite - Opret et forhold