首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指定的键太长;最大密钥长度为767字节,使用knex。

问指定的键太长;最大密钥长度为767字节,使用knex。
EN

Stack Overflow用户
提问于 2020-05-23 16:58:35
回答 1查看 710关注 0票数 0

我创建了以下事务:

代码语言:javascript
复制
exports.up = async (knex, Promise) => (await knex.schema.hasTable('settings'))
    ? null
    : knex.schema.createTable('settings', function (table) {
        table.increments('id')
        table.string('name').notNullable().unique()
        table.string('value').notNullable()

        table.primary('name')
    }).then(() => {
        return knex('settings').insert([
            { name: 'sandbox', value: 'off'},
            { name: 'promo', value: 'off'}
        ]);
    });

exports.down = async (knex, Promise) => (await knex.schema.hasTable('settings'))
    ? knex.schema.dropTable('settings')
    : null

本质上,我试图创建一个settings表,它定义了两个主键,一个id和一个name。问题是,我得到了这个错误:

迁移失败: alter settings添加唯一settings_name_unique(name)指定的键太长;最大键长度为767字节

我怎么才能修好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 18:40:37

Specified key was too long; max key length is 767 bytes来自MySQL,是在这个答案中解释。string的默认长度为255。有四个字节的utf8mb4字符,这是1020字节。是的,这很烦人。

您可以通过使用动态行格式修复这个问题。这是自5.7.9以来新表的默认设置,因此您也可以考虑升级MySQL。

也可以为字符串设置较低的最大长度。您可以通过将长度传递到string来做到这一点。有四个字节字符,为767 /4=191个字符。

代码语言:javascript
复制
table.string('name', 191).notNullable().unique()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61975573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档