NodeJS使用MariaDB连接器插入数据后BigInt序列化报错求助
解决MariaDB连接器返回BigInt导致JSON序列化失败的问题
问题原因
你看到的51n是Node.js中BigInt类型的字面量表示。MariaDB连接器默认会将数据库里的BIGINT类型字段(比如自增主键)返回为BigInt对象,而JSON.stringify()原生不支持序列化BigInt类型,这就是导致报错的直接原因。
解决方法
1. 手动转换insertId为Number(适合ID范围在安全值内)
如果你的自增主键ID不会超过2^53-1(Number类型的安全整数上限),可以直接将insertId转为Number:
const result = await connection.query('INSERT INTO ...'); const insertId = Number(result.insertId); // 之后再用JSON.stringify处理就不会报错了
2. 配置连接器强制返回Number
在创建MariaDB连接时,添加bigIntAsNumber: true配置项,让连接器自动将所有BigInt类型的字段转为Number:
const mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'your-host', user: 'your-user', password: 'your-password', database: 'your-db', bigIntAsNumber: true // 关键配置 });
3. 自定义JSON.stringify的replacer函数(通用方案)
如果需要处理多个BigInt字段,或者ID可能超出Number安全范围,可以给JSON.stringify()传一个replacer函数,将BigInt转为字符串:
const data = { insertId: 51n, affectedRows: 1 }; const jsonStr = JSON.stringify(data, (key, value) => { return typeof value === 'bigint' ? value.toString() : value; });
4. 直接转为字符串(适合大ID场景)
如果你的主键ID可能超过Number安全范围,直接转成字符串是最稳妥的方式:
const insertId = result.insertId.toString();
内容的提问来源于stack exchange,提问作者BitMaster48
相关产品推荐
相关产品推荐

