8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

TypeScript 中的 SQLite3 Discord ID 精度问题

Lars Kotthoff 1月前

12 0

我正在开发一个使用 TypeScript 和 SQLite3 作为数据库的 Discord 机器人。当使用以下命令查询用户表时:SELECT * FROM Users;我遇到了一个奇怪的问题:返回的 Discord ID 有 3 个数字

我正在开发一个使用 TypeScript 和 SQLite3 作为数据库的 Discord 机器人。 Users 使用以下命令查询表:

SELECT * FROM Users;

我遇到一个奇怪的问题:返回的 Discord ID 有 3 个数字被替换,导致值不正确。

例如:

  • 实际 Discord ID: 1248626823638552701
  • 返回的 Discord ID: 1248626823638552600

您可以看到只有最后 3 位数字不同。

这是我的表的架构 Users

CREATE TABLE IF NOT EXISTS Users (
    _id INTEGER PRIMARY KEY AUTOINCREMENT,
    id TEXT NOT NULL UNIQUE,         -- Discord ID stored as TEXT
    xp INTEGER DEFAULT 0,
    level INTEGER DEFAULT 0,
    balance REAL DEFAULT 0.00,
    market_items TEXT DEFAULT NULL,  -- JSON array of item IDs
    last_level_up TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

id 字段包含 Discord ID,存储时应 TEXT 避免任何整数溢出问题,因为 Discord ID 是大数字。

尽管数据库中存储了正确的 ID,但查询它会导致值不正确,略有差异。存储在 SQLite 中的数据是正确的,但问题发生在检索过程中。

  • 用于查询处理的自定义单例类
  • 创建用户事件
  • 使用示例

如果需要,我可以提供我正在研究的机器人。

我尝试过

  • p9

  • p10

  • p11

  • p12

  • p13

  • p14

我的期望

我期望查询 Users 表格时,检索到的 Discord ID 将与数据库中存储的 ID 完全匹配,数字不会发生任何变化。具体来说,检索到的 ID 应该 1248626823638552701 与存储的 ID 相同,而不是 1248626823638552600 .

帖子版权声明 1、本帖标题:TypeScript 中的 SQLite3 Discord ID 精度问题
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Lars Kotthoff在本站《typescript》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 尝试将每一列解析为 JSON 是导致此问题的原因。

    const parsed = JSON.parse(row[key as keyof typeof row]);
    (row as any)[key] = parsed;
    

    原始查询将返回 row = { id: "1248626823638552701", ... } JSON.parse("1248626823638552701") 1248626823638552600 .

返回
作者最近主题: