如何在node.js中设置mysql连接,以在带无符号整数的算术上抛出超出范围的错误

How do I set up mysql connections in node.js to throw Out of range errors on arithmatic with unsigned integers?

本文关键字:错误 无符号整数 范围 js node 设置 mysql 连接      更新时间:2023-09-26

我使用的是node.js和Mysql2-lib,它似乎与节点mysql-lib有关。我在mysql数据库中有一个无符号整数字段,我正在通过添加或减去进行更新,如下所述:

在我的测试中,user_id为123456的用户有1000块奶酪(未签名)

下面的sql语句没有返回任何错误,将字段设置为最大值减去1(Yikes!)

'UPDATE users 
SET user_cheese = user_cheese - 1001 
WHERE user_id = 123456';

以下准备的语句和值也不会导致错误,并将字段设置为0

'UPDATE users 
SET user_cheese = user_cheese - ? 
WHERE user_id = ?';
preparedVars = [1001, 123456];

当我使用phpBB的mysqli-dbal在php中运行这些语句时,我会得到一个超出范围的错误,并且字段保持不变。我是否可以在node.js中复制上述行为?

您可以将sql_mode设置为严格的-可能php的客户端在启动时会这样做:

SET sql_mode = 'STRICT_TRANS_TABLES';

更新:

只是尝试了一个简单的例子,但得到了超出范围的错误-所以可能是您的服务器配置:

var mysql = require('mysql2');
var c = mysql.createConnection({});
c.query('SELECT CAST(0 AS UNSIGNED) - 1', console.log);

输出[Error: BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'] code: 'ER_DATA_OUT_OF_RANGE', sqlState: '#22003'

并且该代码给出CCD_ 2作为结果:

var mysql = require('mysql2');
var c = mysql.createConnection({});
c.query("SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'");
c.query('SELECT CAST(0 AS UNSIGNED) - 1', console.log);