【问题标题】:Express.js ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect integer value: '' for column 'id' at row 1Express.js ER_TRUNCATED_WRONG_VALUE_FOR_FIELD:不正确的整数值:第 1 行的列 'id' 的''
【发布时间】:2022-01-12 15:11:59
【问题描述】:

在我的 main.js 文件中,字符串是“hello,0,,0,0”(如果您在数组中读取它,则在第二个位置为空)它需要能够将 NULL 传递到数据库中。
仅供参考:如果第二个位置是 0 并且不为空,它将起作用
我正在尝试将字符串“,”拆分为 var,如下所示。

var Val = req.body.string.split(","); 
var one = Val[0];
var two = Val[1];
var three = Val[2];
var four = Val[3];
var five = Val[4];
let sqlquery = "INSERT INTO TESTING (one, two, three, four, five) VALUES (?,?,?,?,?)";

let newrecord = [one, two, three, four, five];  
db.query(sqlquery, newrecord, (err, result) => {
if (err) {
return console.error(err.message);
} else
res.send("Added in database");

我得到了这个错误
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD:不正确的整数值:第 1 行的列“三”的“”

我创建的表:CREATE TABLE TESTING (1 VARCHAR(50), 2 BOOLEAN, 3 INT(4), 4 INT(4), 5 BOOLEAN ,PRIMARY KEY(name));
字段均为 NULL
上表中没有自动增量,我使用完全相同的方式创建了另一个表,但具有自动增量 ID,但仍然抛出相同的错误

【问题讨论】:

  • 第三个值应该接收一个整数,但它从数组 Val[2] 接收空值,您可以将列配置为接收 null,或者如果 val[2] 为空,则将其转换为0 插入前
  • @nermineslimane 它在我的 sql 中已经为 null,它应该将 null 插入数据库而不是 0

标签: javascript mysql express ejs body-parser


【解决方案1】:

既然你知道参数three是一个数字,你可以写

var three = Val[2] || null;

我假设你稍后会执行类似的命令

db.query(sqlquery, [one, two, three, four, five]);

然后,如果Val[2] = "0",你得到three = "0",并且这个字符串值被数据库接受为数字0。

但是Val[2] = "" 是一个falsy 值,因此您得到three = null,并且希望数据库接受它作为NULL 值。

【讨论】:

  • 感谢您的帮助,但它会抛出同样的错误
  • 是不是因为它把null读成字符串而不是真正的NULL?
  • 你能发布你发送sqlquery到数据库的命令吗?
  • 创建表测试(一个 VARCHAR(50),两个 BOOLEAN,三个 INT(4),四个 INT(4),五个 BOOLEAN,主键(名称));
  • 不,不是建表语句,而是发出SQL插入语句的Javascript命令。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 2021-12-11
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多