首页 > 解决方案 > Node.js 与 knex + Mysql 迁移错误,而重命名列导致默认值

问题描述

我是新手,nodejs我的英语不好,请帮助我,我只是想在nodejs(express)using中迁移我的数据库knex,而我正在使用 Mysql 作为数据库。我想重命名表中的一个字段,当我尝试迁移我的数据库时,我遇到了一些问题,说错误默认值。

这是我想要做的:

我的迁移

exports.up = function(knex) {
    return knex.schema.table ('tbl_skills', function(table) {
        table.renameColumn('preminum_price', 'premium_price')
    })
};

这是我的数据库结构

 Name           | Datatype | length | Default             |
    id             | INT      | 20     | No default          |
    preminum_price | DOUBLE   | 5,2    | No default          |
    insertdate     | TIMESTAMP|        | 0000-00-00 00:00:00 |
    updatedate     | TIMESTAMP|        | 0000-00-00 00:00:00 |

这就是我在尝试 knex migrate 时得到的:最新

migration file "20191125105226_alter_tbl_skills.js" failed
migration failed with error: alter table `tbl_skills` change `preminum_price` `premium_price` double(5,2) NOT NULL - ER_INVALID_DEFAULT: Invalid default value for 'insertdate'
Error: ER_INVALID_DEFAULT: Invalid default value for 'insertdate'

我不知道如何使用默认值设置 insertdate 的值。请帮忙

标签: mysqlnode.js

解决方案


这很可能是因为服务器 SQL 模式 - NO_ZERO_DATE

在严格模式下,不允许 '0000-00-00' 作为有效日期。您仍然可以使用 IGNORE 选项插入零日期。当不在严格模式下时,日期会被接受,但会生成警告。如果您有权访问 my.ini(mysql conf 文件),请从 sql-mode 中删除 NO_ZERO_DATA 并重新启动服务器。

您可以使用 SHOW VARIABLES LIKE 'sql_mode' 检查它


推荐阅读