【发布时间】: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