我正在使用 node.js 和似乎与 Mysql2 库相关的 node-mysql 库。我在 mysql 数据库中有一个无符号整数字段,我正在通过添加或减去更新,如下所述:
在我的测试中,user_id 为 123456 的用户有 1000 个奶酪(未签名)
以下 sql 语句不返回任何错误,将字段设置为最大值减 1(赞!)
'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);
输出 [错误:BIGINT UNSIGNED 值超出'(cast(0 as unsigned) - 1)'] code: 'ER_DATA_OUT_OF_RANGE', sqlState: '#22003'
此代码给出 { 'CAST(0 AS UNSIGNED) - 1': -1 }
作为结果:
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);
关于javascript - 如何在 node.js 中设置 mysql 连接以在使用无符号整数进行算术运算时抛出超出范围错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778417/