我正在尝试从 nodejs 将标准 ISO 日期插入 MySQL 数据库并收到以下错误:
ER_TRUNCATED_WRONG_VALUE: Incorrect date value: '0' for column 'lastmod' at row 1
StackOverflow 上的所有其他问题似乎人们没有正确格式化他们的日期。
如果我手动运行查询,它会在一些修改后工作 - 是不是 nodejs 给了我不好的准备?还是我以某种方式错误地发送数据?
首先创建表:
CREATE TABLE IF NOT EXISTS urls (
id int(6) unsigned NOT NULL AUTO_INCREMENT,
url varchar(255) NOT NULL,
lastmod date NOT NULL,
updatedAt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
createdAt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (url),
UNIQUE KEY id (id)
);
然后插入条目:
const mysql = require('mysql2')
const pool = mysql.createPool(settings);
async function upsert(entries){
// entries = [{url, lastmod}, {url, lastmod}]
const query = `
INSERT INTO urls (
url, lastmod )
VALUES (?)
ON DUPLICATE KEY UPDATE
url=VALUES(url),
lastmod=VALUES(lastmod)
`
let q = pool.format(query, entries)
console.log(q);
let result;
try{
result = await pool.query(query, entries)
} catch ( err ){
console.log("Error in upsert", err)
} finally {
return result
}
}
在 console.log 中,插入语句将如下所示:
INSERT INTO urls (
url, lastmod
)
VALUES (
`url` = 'https://test.com',
`lastmod` = '2020-12-30'
)
ON DUPLICATE KEY UPDATE
url=VALUES(url),
lastmod=VALUES(lastmod),
并产生以下错误:ER_TRUNCATED_WRONG_VALUE: Incorrect date value: '0' for column 'lastmod' at row 1
有趣的是,如果我删除
`col`='value'
从我的 VALUES 列表中并且只将其设为“值”而不是col
=“值”,我可以手动运行插入 - 为什么节点 mysql 准备这样的值?有什么我做错了吗?
谢谢!