mysql - 字符串、字符串(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)
解决方案
只需重命名该列:
ALTER TABLE `members` RENAME COLUMN `member_activation_hash` TO `user_activation_hash`
推荐阅读
- firebase - Firestore 数据上的嵌套 v-for 循环反应性地复制最深层的更改
- css - 使网格或弹性框中的项目每行具有相等的动态列数
- facebook - Facebook 受众广告会在亚马逊设备上运行吗?
- vue.js - 添加新添加的项目时,VueJS 索引会更新吗?
- python-3.x - 使用经过训练的 ANN 做出新的预测 - Keras
- python - 将对象从 AWS S3 移动到 MediaStore
- reactjs - 如何将材质 ui 组件包装为字段的 redux 表单组件?
- python - 处理 Selenium-Python 脚本期间显示的弹出窗口异常
- vim - VSCode 的 Vim:重新映射 ctrl + e 以在插入模式下转到行尾
- karate - 空手道 - 验证存储在不同文件中的 json 响应