首页 > 解决方案 > 字符串、字符串(255)还是 VARCHAR(255)?

问题描述

我使用knex并拥有一个使用以下内容创建的 MySql 数据库表:

exports.up = function (knex, Promise) {
    return knex.schema.table("members", (table) => {
        table.string("member_activation_hash", 255);
        table.dateTime("member_activation_sent_at");
    });
};

现在我想(仅)更改两列的名称,并考虑以下内容:

exports.up = function(knex) {
    return knex.schema.raw(
        "ALTER TABLE `members` CHANGE `member_activation_hash` `user_activation_hash` STRING DEFAULT NULL",
        "ALTER TABLE `members` CHANGE `member_activation_sent_at` `user_activation_sent_at` datetime DEFAULT NULL"
    );
};

但我不确定STRING第 3 行。创建它时包含它,255但我认为这不是STRING(255)一个选项,并且VARCHAR(255)会更改数据类型(我不想要)。仅更改名称的正确方法是member_activation_hash什么?

更新:所以我现在有:

exports.up = function(knex) {
    return knex.schema.raw(
        "ALTER TABLE `members` RENAME COLUMN `member_activation_hash` TO `user_activation_hash`",
        "ALTER TABLE `members` RENAME COLUMN `member_activation_sent_at` TO `user_activation_sent_at`"
    );
};

但这会产生错误:

迁移失败并出现错误:预期 1 个绑定,看到 0 错误:预期 1 个绑定,在 Raw.toSQL(C: \Users\xxx\node_modules\knex\lib\raw.js:78:13)

标签: mysqlsqlknex.js

解决方案


只需重命名该列:

ALTER TABLE `members` RENAME COLUMN `member_activation_hash` TO `user_activation_hash`

请参阅此处的文档


推荐阅读