PostgreSQL:十进制/数字数据类型的数字字段溢出 - 为什么会出现此错误

Sto*_*ace 3 sql postgresql sqldatatypes

我创建了一个这样的表

CREATE TABLE foo (
    id serial CONSTRAINT id_pk PRIMARY KEY,
    bar varchar(256),
    test decimal(5,5)
);
Run Code Online (Sandbox Code Playgroud)

然后我想填充test

 INSERT INTO foo (test) VALUES (12345.12345)
Run Code Online (Sandbox Code Playgroud)

这给了我

数字字段溢出详细信息:精度为 5、小数位数为 5 的字段必须舍入到小于 1 的绝对值。

我不明白。但是,如果我将一列设置为decimal(5,5),则逗号左侧必须有五位数字,逗号右侧必须有五位数字。我有那个号码12345.12345

为什么它给我这个错误?

a_h*_*ame 5

您误解了指定小数的工作原理(我同意这有点令人困惑)。

从手册中引用

数字的精度是整数中有效数字的总数,即小数点两边的位数。数字的小数位数是小数部分的小数位数,在小数点的右边

所以第一个数字定义了位数,第二个数字定义了小数位数。

如果你想要小数点前 5 位和小数点后 5 位,你需要使用 decimal(10,5)