【问题标题】:STRING, STRING(255) or VARCHAR (255)?字符串、字符串(255)还是 VARCHAR(255)?
【发布时间】:2021-03-28 05:56:19
【问题描述】:

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

但我不确定第 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`"
    );
};

但这会产生错误:

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

【问题讨论】:

  • MySQL 中没有名为 string 的列类型。该类型属于 Knex,并被转换为 DBMS 支持的适当类型。
  • 这能回答你的问题吗? Rename a column in MySQL

标签: mysql sql knex.js


【解决方案1】:

只需重命名列:

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

See the documentation here

【讨论】:

  • 谢谢,我已经尝试过了(请参阅我帖子的更新),但这会产生错误。
  • 听起来像是knex 的问题,我不熟悉。但是,ALTER TABLE...RENAME COLUMN... 是您在 MySQL 中重命名列的方式。让它与第三方查询构建器一起工作是您必须完成的工作。但是looking online 我知道你可能想看看knex.schema.table.renameColumn。祝你好运。
  • 谢谢,可以使用:exports.up = function(knex) { return knex.schema.table('members', table => { table.renameColumn('member_activation_hash', 'user_activation_hash'); table.renameColumn('member_activation_sent_at', 'user_activation_sent_at'); }); };
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多