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旧版本,可选择以下两种方案修复:
- 升级MariaDB连接器版本到2.1.4及以上,该版本官方已经修复了这个类型转换Bug,不需要修改任何业务代码。
- 保持当前版本的前提下,在数据库连接配置中添加自定义类型转换规则,避免字符串被误转:
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
相关产品推荐
相关产品推荐

