(PostgreSQL, Node.js & Discord.js)为什么我的查询输出显示的内容与数据库中的内容完全不同?



问题(更详细地说):我是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

最新更新