sql >> Databáze >  >> RDS >> Mysql

Když přidám xx do sloupce mysql float, je to špatný výsledek, je to chyba?

Váš problém má něco společného s tím, jak velká je vaše hodnota s pohyblivou řádovou čárkou, ale nejsem si 100% jistý proč. Testoval jsem aktualizaci podobného řádku s menšími čísly a fungovalo to dobře. Také byste se měli zdržet používání uvozovek, kdykoli je to možné, protože to vyžaduje zvláštní zpracování. Viz tato otázka SO:aktualizujte sloupec odečtením a hodnotu

Zde je moje snadné řešení, jak navrhl Tim Biegeleisen:

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;

Vložit:

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

Aktualizace bez řetězců:

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

Při počítání s velkými hodnotami s pohyblivou řádovou čárkou jsou některé zvláštní věci. Některé z těchto problémů jsou závislé na počítači a souvisejí s typem procesoru, který máte. Přečtěte si více zde:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html

Také podle další otázky SO NEJSOU hodnoty s pohyblivou řádovou čárkou dobrým způsobem, jak ukládat peněžní hodnoty. Rozdíl mezi plovoucím a desetinným datovým typem (viz druhá odpověď).

Zdá se, že použití decimal a numeric datové typy jsou nejlepší pro peněžní sloupce v mysql.




  1. Cant pg_restore na Heroku:nelze číst ze vstupního souboru:konec souboru

  2. psycopg2 COPY pomocí kurzoru.copy_from() zamrzne při velkých vstupech

  3. Získejte seznam všech funkcí a procedur v databázi Oracle

  4. Oracle hibernate ORA-01461 CLOB