字符串、字符串 (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`
我使用 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`