如何在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);