美文网首页
学PostgreSQL数据库,别用内置的货币money数据类型

学PostgreSQL数据库,别用内置的货币money数据类型

作者: 阿群1986 | 来源:发表于2022-08-13 23:21 被阅读0次

    https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_money

    Don't use money

    The <tt style="font-family: monospace, monospace;">money</tt> data type isn't actually very good for storing monetary values. Numeric, or (rarely) integer may be better.

    Why not?

    lots of reasons.

    It's a fixed-point type, implemented as a machine int, so arithmetic with it is fast. But it doesn't handle fractions of a cent (or equivalents in other currencies), it's rounding behaviour is probably not what you want.

    It doesn't store a currency with the value, rather assuming that all money columns contain the currency specified by the database's lc_monetary locale setting. If you change the lc_monetary setting for any reason, all money columns will contain the wrong value. That means that if you insert '$10.00' while lc_monetary is set to 'en_US.UTF-8' the value you retrieve may be '10,00 Lei' or '¥1,000' if lc_monetary is changed.

    Storing a value as a numeric, possibly with the currency being used in an adjacent column, might be better.

    When should you?

    If you're only working in a single currency, aren't dealing with fractional cents and are only doing addition and subtraction then money might be the right thing.

    相关文章

      网友评论

          本文标题:学PostgreSQL数据库,别用内置的货币money数据类型

          本文链接:https://www.haomeiwen.com/subject/prjcgrtx.html