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/

相关文章:

php - mysql 改变表顺序不工作

MySQL如何一次性获取所有具有相同值的行的值?

php - 如何在多列中进行搜索

javascript - 即使在调用 "return callback()"后,Nodejs 函数仍继续执行

javascript - Angular 2 post请求不发送图像数据

mysql - Rails 找到 :conditions

c# - 如何检查我的 C# - MySQL 连接是否成功,或者如果不成功,返回原因?

node.js - 错误 : (gcloud. 函数.deploy)操作错误 : code=3, 消息 = 构建失败

node.js - 用不仅仅是代码来打包 Node.js 模块

mysql - sync-mysql node js中使用变量调用query