0

我正在尝试从 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 准备这样的值?有什么我做错了吗?

谢谢!

4

1 回答 1

0

我发现错误是VALUES (?) 应该写成VALUES ?

不完全确定有什么区别,但是,解决了我的问题:-)

于 2020-09-13T10:40:01.430 回答