【问题标题】:Does MariaDB allow 255 character unique indexes?MariaDB 是否允许 255 个字符的唯一索引?
【发布时间】:2017-09-14 22:32:46
【问题描述】:

我从 10.0.29-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04 反复收到此错误

第 81 行的错误 1071 (42000):指定的密钥太长;最大键 长度为 767 字节

目标行通常如下所示:

name VARCHAR(255) NOT NULL UNIQUE,

将其更改为 VARCHAR(63) 会使错误消失。这是 MariaDB 中的错误吗?

【问题讨论】:

标签: mariadb


【解决方案1】:

要跟进已接受的答案 - 更改为 UTF8,我发现这是最简单的解决方案,您可以在创建表格时在 MariaDb 中使用以下行:

name varchar(255) CHARACTER SET 'utf8' UNIQUE NOT NULL,

【讨论】:

    【解决方案2】:

    要解决此错误,请执行以下操作之一

    解决方法:执行以下操作之一

    • 升级到 5.7.7(或更高版本)以获得 3072 字节限制而不是 767
    • VARCHAR 上将255 更改为191(假设您的值不会太长)
    • ALTER .. CONVERT TO utf8 -- 但这不允许 Emoji 和一些中文
    • 使用“前缀”索引(不明智)
    • 重新配置(适用于 5.6.3 - 5.7.6)(下)

    重新配置 5.6.3 或 5.5.14:

    SET GLOBAL innodb_file_format=Barracuda;
    SET GLOBAL innodb_file_per_table=1;
    SET GLOBAL innodb_large_prefix=1;
    logout & login (to get the global values);
    ALTER TABLE tbl ROW_FORMAT=DYNAMIC;  (or COMPRESSED)
    

    (版本号以 Oracle 的 MySQL 为准;本期 MariaDB 版本号不同。)

    【讨论】:

    • 我不认为 5.7 在这方面有什么神奇的变化,除了修改的默认值很容易配置,因此没有必要为此切换版本。最后一条建议应该完全适用于 MariaDB 10.0,这些选项可以在配置文件中设置。对于 MariaDB 版本,相关性如下:10.0 和 10.1 具有 InnoDB 5.6,10.2 具有 InnoDB 5.7。
    • @elenst -- 谢谢,我无法快速发现 5.x 和 10.x 之间的映射。而且,是的,5.7“默认值”基本上阻止了 767 再次发生。以及10.2.0中对应的代码??或者稍微晚一点?
    • 10.2.0 有 InnoDB 5.7,它在它发布的时候就可以使用,但我不建议任何人使用任何分支的零版本来进行除 alpha 测试之外的任何事情。 10.2.5-rc 是当前可用的最新 10.2 版本,它具有 InnoDB 5.7.14。下一个 10.2.6-ga 预计会有 InnoDB 5.7.18。
    • 更正:10.2.0 仍然有 5.6,10.2.2 有 5.7。
    • 问题在于 MariaDB 默认为 4 字节“字符”,而不是我习惯的 2 字节字符。 UTF8 修复了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2015-10-31
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多