mysql - Node.js 与 knex + Mysql 重命名列时迁移错误导致默认值

标签 mysql node.js

我是 nodejs 的新手,我的英语很糟糕,请帮助我,我只是尝试使用 knex< 在 nodejs(express) 中迁移我的数据库,我使用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:latest 时得到的结果

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'

我不知道如何使用默认值设置插入日期的值。请帮忙

最佳答案

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

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

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

关于mysql - Node.js 与 knex + Mysql 重命名列时迁移错误导致默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59027294/

相关文章:

node.js - 自定义(用户友好)ValidatorError 消息

mySQL:如何过滤其他表中没有相同值的列?

php - OUTER JOIN还要加起来的量

node.js - 压缩警告 : missing end signature when zipping a directory

node.js - package.json 中的条件安装后取决于您的操作系统?

node.js - 用于授权从 React Native 应用程序到 Node 服务器的 API 调用的推荐策略是什么?

php - 无法使用php从表单将数据插入MYSQL

mysql查找重复项

php - Doctrine mysql 级联得到恢复

javascript - 在 Protractor JS 中将函数从一个文件读取到另一个文件