You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drizzle联表查询结果字段类型不匹配问题求助

问题排查:SQLite + Bun + bun:sqlite 查询结果字段类型与键不匹配

问题场景

执行以下查询时,返回结果出现字段类型与字典键不匹配的混乱情况:

const results = await db.select().from(tweets).where(sql`${tweets.response} is null`)
        .innerJoin(users, eq(users.twitter_id, tweets.authorId))

示例异常结果:

{
  "tweets": {
    "id": 134123442,
    "twitter_id": 0,
    "created_at": "None",
    "authorId": 0,
    "is_retweet": false,
    "retweetedTweetId": false,
    "is_quoted": false,
    "quotedTweetId": 2,
    "is_reply": false,
    "reply_counts": 17
    ...
  }
}

可能的原因及解决方向

  • bun:sqlite类型映射逻辑偏差:SQLite是弱类型数据库,bun:sqlite在将查询结果转为JS对象时,可能对NULL、整数、布尔值的推断出错。比如retweetedTweetId应为可空整数,却被解析为布尔值,大概率是数据库中该字段为NULL/0时,bun的转换逻辑误判。
  • 表结构与代码schema定义不匹配:如果tweets表中retweetedTweetId是可空整数,但代码里的模型schema未标记为可空,bun会用默认值(如false)填充NULL值,导致类型混乱。检查代码中的表结构定义,确保字段可空性与数据库一致。
  • JOIN操作引发的映射异常:JOIN后结果集包含两张表的字段,若存在同名字段(即使当前示例没有)会导致字段覆盖;另外,JOIN后的结果集字段顺序或解析逻辑可能出现偏差,影响对象映射。可以尝试单独查询tweets表,看是否还存在类型问题,排查是否是JOIN导致的。
  • bun版本存在已知bug:部分旧版本的bun或bun:sqlite存在类型映射bug,建议升级到最新稳定版,验证问题是否解决。
  • 手动SQL拼接的潜在问题:使用sql模板字符串写WHERE条件,可能存在隐式类型转换异常。建议改用ORM提供的isNull方法,比如where(isNull(tweets.response)),避免手动拼接SQL带来的解析问题。

内容的提问来源于stack exchange,提问作者enzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:36:11