Nodejs开发者注意:mysql处理BIGINT里面的一个坑
Nodejs开发者注意:mysql处理BIGINT里面的一个坑
发现bigint数据,读取的时候,被约份了,后来查一下数据模块,发现这样就可以完美解决,分享一下
supportBigNumbers: When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option (Default: false).
var connection = mysql.createConnection({ host : ‘example.org’, user : ‘bob’, password : ‘secret’, supportBigNumbers: true });
PS:我是被迫用bigINT的,能不用就不用,bigint其实是很不合理的,无奈接入的API的数据类型是bigint,就好默默流泪了。
Node.js 开发者注意:mysql 处理 BIGINT 里面的坑
在使用 Node.js 进行 MySQL 数据库操作时,经常会遇到一些令人头疼的问题。其中一个常见的问题是当从数据库中读取 BIGINT
类型的数据时,数据可能会被四舍五入或截断,导致精度丢失。本文将介绍如何通过配置 mysql
模块来正确处理 BIGINT
类型的数据。
问题描述
当你从 MySQL 数据库中读取 BIGINT
类型的数据时,如果这些数据超出了 JavaScript 的 Number.MAX_SAFE_INTEGER
范围(即大于 2^53 - 1),那么这些数据会被自动转换为浮点数,从而导致精度丢失。例如,如果你有一个超过 15 位数字的 BIGINT
值,它可能会被四舍五入或截断。
解决方案
为了解决这个问题,你可以启用 mysql
模块中的 supportBigNumbers
选项。该选项默认为 false
,但当你将其设置为 true
时,mysql
模块会将 BIGINT
和 DECIMAL
类型的数据以字符串形式返回,从而保留其精度。
示例代码
以下是一个简单的示例,展示了如何配置 mysql
模块以支持 BIGINT
类型数据的正确处理:
const mysql = require('mysql');
// 创建一个数据库连接
const connection = mysql.createConnection({
host: 'example.org',
user: 'bob',
password: 'secret',
database: 'testdb',
supportBigNumbers: true // 启用支持大数
});
// 连接到数据库
connection.connect((err) => {
if (err) {
console.error('Error connecting to database:', err);
return;
}
console.log('Connected to database');
// 查询包含 BIGINT 数据的表
connection.query('SELECT * FROM my_table', (error, results, fields) => {
if (error) throw error;
// 打印查询结果
results.forEach(result => {
console.log(`BIGINT value: ${result.bigint_column}`);
});
});
});
// 断开连接
connection.end();
注意事项
- 避免使用 BIGINT:虽然有时你可能需要处理
BIGINT
类型的数据,但在可能的情况下,最好避免使用它们,因为它们可能导致精度问题。 - API 接入限制:如果 API 返回的数据类型是
BIGINT
,你可能无法避免使用它们。在这种情况下,确保你的数据库查询配置正确,以防止数据精度丢失。
希望这篇文章对你有所帮助!
嗯,如果后端是long(bigint)的数字类型,传到前端js时就会被js给约掉,因为js里的number有最大值限制。参考这篇:http://cnodejs.org/topic/4fb3722c1975fe1e132b5a9a
在Node.js中使用MySQL时,处理BIGINT
类型的数据可能会遇到一些问题。特别是当你从数据库中读取BIGINT
值时,它们可能会被转换为浮点数并因此丢失精度。为了解决这个问题,你可以启用mysql
模块中的supportBigNumbers
选项。
示例代码
const mysql = require('mysql');
// 创建一个MySQL连接
const connection = mysql.createConnection({
host: 'example.org',
user: 'bob',
password: 'secret',
supportBigNumbers: true // 启用此选项以正确处理大数字
});
// 连接到数据库
connection.connect((err) => {
if (err) throw err;
console.log('Connected to MySQL database!');
// 查询包含BIGINT数据的表
connection.query('SELECT * FROM your_table', (error, results, fields) => {
if (error) throw error;
// 打印查询结果
results.forEach(row => {
console.log(`BIGINT value: ${row.your_bigint_column}`);
});
});
// 断开连接
connection.end();
});
解释
-
supportBigNumbers: true
:通过启用该选项,mysql
模块将能够正确地处理BIGINT
类型的数据,并且不会将其转换为浮点数。 -
使用
createConnection
创建一个连接对象,并传入所需的配置信息。 -
在连接成功后,执行一个简单的查询以获取包含
BIGINT
列的数据。 -
最后打印出每一行中的
BIGINT
列的值。
注意事项
尽管启用supportBigNumbers
可以解决精度丢失的问题,但如果你可以避免使用BIGINT
,最好还是选择其他更合适的数据类型(例如VARCHAR
),因为BIGINT
通常用于非常大的整数值,这可能导致性能问题和存储空间浪费。