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

Node环境SQL查询返回NaN与mariadb版本兼容性问题求助

问题原因解析

你遇到的是Node.js MariaDB连接器2.1.1~2.1.3版本的已知类型转换Bug,和业务代码逻辑无关:

  • 2.1.1版本官方更新了结果集元数据解析逻辑,对字段类型的判定条件存在错误,会将VARCHAR/CHAR等字符串类型的字段误识别为数值类型,尝试调用Number()方法做强制转换,非纯数字的字符串转换后就会返回NaN。
  • SQL Workbench直接读取数据库返回的原始数据和字段类型,不需要经过Node.js连接器的转换逻辑,所以执行同一条SQL可以得到正确结果。
  • 你回退到2.1.0版本后恢复正常,是因为2.1.0版本还没有引入这个错误的类型判定逻辑。
其他可选解决方案

如果你不想停留在2.1.0旧版本,可选择以下两种方案修复:

  1. 升级MariaDB连接器版本到2.1.4及以上,该版本官方已经修复了这个类型转换Bug,不需要修改任何业务代码。
  2. 保持当前版本的前提下,在数据库连接配置中添加自定义类型转换规则,避免字符串被误转:
const mariadb = require('mariadb');
const pool = mariadb.createPool({
  // 原有连接配置不变
  typeCast: (field, next) => {
    // 字符串类型字段直接返回原始值,不做自动转换
    if (['STRING', 'VAR_STRING'].includes(field.type)) {
      return field.string();
    }
    return next();
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:48:03