【发布时间】:2020-11-09 10:11:59
【问题描述】:
我有这段代码(如下所示)连接到数据库,然后运行 SQL 查询,该查询选择“id”列中的所有值(bigint 雪花 ID),这些值也位于查询中写入的数组中。完成后,它将结果记录到控制台。
但由于某种原因,它似乎对数字进行了四舍五入,或者至少用 0 替换了一些最后的数字。我正在尝试找出原因以及如何解决这个问题,因此我们将不胜感激!
const mysql = require('mysql');
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "botproject"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT id FROM xplevel WHERE id IN (718141588043202731, 294126883694444544, 685325127373553689, 307409641262940160, 478536470081175562);", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
预期的输出将是这样的(与查询数组中的值完全相同):
[
RowDataPacket { id: 294126883694444544 },
RowDataPacket { id: 307409641262940160 },
RowDataPacket { id: 478536470081175562 },
RowDataPacket { id: 685325127373553689 },
RowDataPacket { id: 718141588043202731 }
]
但我得到的实际输出是这样的:
[
RowDataPacket { id: 294126883694444540 },
RowDataPacket { id: 307409641262940160 },
RowDataPacket { id: 478536470081175550 },
RowDataPacket { id: 685325127373553700 },
RowDataPacket { id: 718141588043202700 }
]
编辑: 请注意,直接在 mysql 终端中运行查询时不会这样做:
mysql> SELECT id FROM xplevel WHERE id IN (718141588043202731, 294126883694444544, 685325127373553689, 307409641262940160, 478536470081175562);
+--------------------+
| id |
+--------------------+
| 294126883694444544 |
| 307409641262940160 |
| 478536470081175562 |
| 685325127373553689 |
| 718141588043202731 |
+--------------------+
5 rows in set (0.00 sec)
【问题讨论】:
-
这看起来是某种舍入/精度错误。
-
尝试将数字转换为 BigInt:
SELECT id FROM CAST(xplevel AS UNSIGNED) WHERE... -
@ZephDavies 使用
SELECT CAST(id AS CHAR) AS id FROM . . .有效!
标签: javascript mysql replace output digits