gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:03:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com