如何在node.js中设置mysql连接,以在带无符号整数的算术上抛出超出范围的错误
How do I set up mysql connections in node.js to throw Out of range errors on arithmatic with unsigned integers?
我使用的是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);
相关文章:
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 错误:格式为整数的 javascript 键无效
- 如何使用JavaScript模拟x86无符号32位整数乘法
- 尝试将无符号长整型的 ARGB 数据绘制到 HTML 画布
- 游戏应用程序 BIGINT 无符号值超出范围
- 如何在node.js中设置mysql连接,以在带无符号整数的算术上抛出超出范围的错误
- Javascript无符号短灰度图像
- Javascript中的无符号32位整数
- JavaScript 中的 32 位有符号整数数学
- 角度 UI/引导类型提前显示“错误:无控制器:ngModel”错误
- ASM.js 类型错误:比较的参数必须同时是有符号、无符号或双精度
- 在JavaScript中减去有符号整数
- 将4个8位无符号整数打包为32位浮点值
- 序列化无符号整数(ulong)数组时,Json.NET崩溃
- javascript中带有无符号32位整数的位移位/类型转换
- AJAX激发错误无响应文本
- 无符号整数数组到base64的快速转换
- 计数无符号整数的位数
- HTML5输入type=number应该只允许无符号整数
- 32位-在javascript中将32位无符号小端序转换为整数