问题(更详细地说):我是PostgreSQL的新手,我在Postbird中运行了一个查询,它刚刚创建了一个包含一堆值的表:
CREATE TABLE guild_settings (
mute_role_id bigint,
guild_id bigint,
member_role_id bigint,
mod_log bigint,
member_log bigint
);
我将一个值作为测试插入PostBird中的列CCD_ 1中;查询";特点:
INSERT INTO guild_settings (guild_id) VALUES (843893421277446185);
现在,我进入代码编辑器,运行代码(在作为命令运行的异步函数中):
const res = await sql `select * from guild_settings`;
console.log(res)
当我运行上面的命令时,我得到的是:
[
{
mute_role_id: null,
guild_id: 843893421277446100,
member_role_id: null,
mod_log: null,
member_log: null
},
count: 1,
command: 'SELECT'
]
正如你所知,最后3位数字与我输入的数字不同。
为什么guild_id
显示843893421277446100
,而我非常清楚地将其制作为843893421277446185
?我删除了表,转到另一个数据库,尝试了所有的方法,但似乎都不起作用。我还在网上搜索答案,但什么也找不到。
代码:
sql.begin(async sql => {
const [res] = await sql`
select guild_id from guild_settings
`
console.log([res])
}).catch(err => console.log(err + "Something went wrong."))
下面是数据库显示的一些图像,而不是控制台显示的内容和我进行的查询。
插入查询
数据库内容
控制台
问题是,虽然PostgreSQL可以将9223372036854775807(2^63-1)
以下的数字存储为bigint,但在JavaScript中,MAX_SAFE_INTEGER是9007199254740991(2^53-1
)。任何超过这个数字的东西都是不安全的,JavaScript很难解释它
在您的情况下,最后两位数字变为零:
/th> | |
---|---|
9007199254740991 的最大安全整数 |
|
您的整数 | 843893421277446185 |
您的整数变为 | 843893421277446100 |