如何在node.js中设置mysql连接,以使用无符号整数运算出范围错误?
我正在使用node.js和Mysql2 lib,这似乎与node-mysql lib有关。 我有一个无符号的整数字段在MySQL数据库,我正在更新通过增加或减less,如下所述:
在我的testing用户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';
更新:
只是尝试一个简单的例子,并得到了范围错误 – 所以可能是你的服务器configuration:
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'
输出[Error: BIGINT UNSIGNED value is out of range in '(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);