javascript - 如何在 node.js 中设置 mysql 连接以在使用无符号整数进行算术运算时抛出超出范围错误?

标签 javascript mysql node.js

我正在使用 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/

相关文章:

javascript - 为什么 system.js 返回一个空对象而不是 angularjs?

javascript - Angular,将 json 发送到 API

mysql - 在文本区域中查找 SSN

node.js - Node Jest-必须指定配置路径

javascript - 使用相同的 jQuery 函数但在 HTML 中导致冲突

javascript - 设置无效的日期字符串 HTML5 日期输入

php - 带mysql连接的下拉框

mysql - 测试驱动开发检查数据库查询所涉及的方法

node.js - 为什么我的 jade 变量未定义?

javascript - Node.js 未定义的 CSS 文件