sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:Vilken datatyp ska användas för valuta?

Din källa är inte på något sätt officiell. Det är från 2011 och jag känner inte ens igen författarna. Om pengatypen var officiellt "avskräckt" skulle PostgreSQL säga det i manualen - vilket det inte gör.

För en mer officiell källa , läs den här tråden i pgsql-general (från bara den här veckan!), med uttalanden från kärnutvecklare inklusive D'Arcy J.M. Cain (ursprunglig författare av typen pengar) och Tom Lane:

Relaterat svar (och kommentarer!) om förbättringar i de senaste utgåvorna:

  • Jasper-rapport:det går inte att få värde för fältet 'x' i klassen 'org.postgresql.util.PGmoney'

I grund och botten, money har sina (mycket begränsade) användningsområden. Postgres Wiki föreslår att man i stort sett bör undvika det, med undantag för de snävt definierade fallen. Fördelen jämfört med numeric är prestanda .

decimal är bara ett alias för numeric i Postgres, och används ofta för monetära data, eftersom det är en typ av "godtycklig precision". Manualen:

Typen numeric kan lagra siffror med ett mycket stort antal siffror. Det rekommenderas särskilt för att lagra penningbelopp och andra kvantiteter där exakthet krävs.

Personligen gillar jag att lagra valuta som integer representerar cent om bråkdelar aldrig förekommer (i princip där pengar är vettigt). Det är mer effektivt än något annat av de nämnda alternativen.



  1. SQL Server In-Memory OLTP:Grunderna

  2. Oväntad variabeltyp som returneras av Receive-Job

  3. Ampersand (&) operator i en SQL Server WHERE-klausul

  4. Knee-Jerk Wait Statistik:PAGEIOLATCH_SH