MariaDB 是否允许 255 个字符的唯一索引?
Does MariaDB allow 255 character unique indexes?
我从 10.0.29-MariaDB-0ubuntu0.16.04.1 中反复收到此错误 Ubuntu 16.04
ERROR 1071 (42000) at line 81: Specified key was too long; max key
length is 767 bytes
目标行通常如下所示:
name VARCHAR(255) NOT NULL UNIQUE,
将其更改为 VARCHAR(63) 会使错误消失。这是 MariaDB 中的错误吗?
要解决此错误,请执行以下操作之一
解决方法:执行以下操作之一
- 升级到 5.7.7(或更高版本)以获得 3072 字节限制而不是 767
- 在
VARCHAR
上将 255
更改为 191
(假设您的值不太长)
ALTER .. CONVERT TO utf8
-- 但是这不允许表情符号和一些中文
- 使用 "prefix" 索引(不明智)
- 重新配置(适用于 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 版本号与此问题不同。)
要跟进接受的答案 - 更改为 UTF8,我发现这是最简单的解决方案,您可以在创建 table 时在 MariaDb 中使用以下行:
name varchar(255) CHARACTER SET 'utf8' UNIQUE NOT NULL,
我从 10.0.29-MariaDB-0ubuntu0.16.04.1 中反复收到此错误 Ubuntu 16.04
ERROR 1071 (42000) at line 81: Specified key was too long; max key length is 767 bytes
目标行通常如下所示:
name VARCHAR(255) NOT NULL UNIQUE,
将其更改为 VARCHAR(63) 会使错误消失。这是 MariaDB 中的错误吗?
要解决此错误,请执行以下操作之一
解决方法:执行以下操作之一
- 升级到 5.7.7(或更高版本)以获得 3072 字节限制而不是 767
- 在
VARCHAR
上将255
更改为191
(假设您的值不太长) ALTER .. CONVERT TO utf8
-- 但是这不允许表情符号和一些中文- 使用 "prefix" 索引(不明智)
- 重新配置(适用于 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 版本号与此问题不同。)
要跟进接受的答案 - 更改为 UTF8,我发现这是最简单的解决方案,您可以在创建 table 时在 MariaDb 中使用以下行:
name varchar(255) CHARACTER SET 'utf8' UNIQUE NOT NULL,