字符串、字符串 (255) 还是 VARCHAR (255)?

STRING, STRING(255) or VARCHAR (255)?

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

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"
    );
};

但我不确定第 3 行的 STRING。创建时它包含 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`"
    );
};

但这会产生错误:

migration failed with error: Expected 1 bindings, saw 0 Error: Expected 1 bindings, saw 0 at replaceRawArrBindings (C:\Users\xxx\node_modules\knex\lib\raw.js:141:11) at Raw.toSQL (C:\Users\xxx\node_modules\knex\lib\raw.js:78:13)

只需重命名该列:

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

See the documentation here