MariaDB是否允许255个字符的唯一索引?
我在10.0.29-MariaDB-0ubuntu0.16.04.1 ubuntu16.04中反复遇到这个错误 第81行出现错误1071(42000):指定的键太长;最大键 长度为767字节 目标行通常如下所示:MariaDB是否允许255个字符的唯一索引?,mariadb,Mariadb,我在10.0.29-MariaDB-0ubuntu0.16.04.1 ubuntu16.04中反复遇到这个错误 第81行出现错误1071(42000):指定的键太长;最大键 长度为767字节 目标行通常如下所示: name VARCHAR(255) NOT NULL UNIQUE, 将其更改为VARCHAR(63)可以消除错误。这是MariaDB中的错误吗?要解决此错误,请执行以下操作之一: 解决方法:执行以下操作之一: 升级到5.7.7(或更高版本)以获得3072字节限制,而不是767 将
name VARCHAR(255) NOT NULL UNIQUE,
将其更改为VARCHAR(63)可以消除错误。这是MariaDB中的错误吗?要解决此错误,请执行以下操作之一: 解决方法:执行以下操作之一:
- 升级到5.7.7(或更高版本)以获得3072字节限制,而不是767
- 将
上的VARCHAR
更改为255
(假设您的值不太长)191
——但这不允许使用表情符号和一些中文ALTER。。转换为utf8
- 使用“前缀”索引(不明智)
- 重新配置(针对5.6.3-5.7.6)(如下)
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(我发现这是最简单的解决方案),您可以在创建表时在MariaDB中使用以下行:
name varchar(255)字符集'utf8'UNIQUE NOT NULL,
可能与@jmoerdyk重复-该链接指向varchar(500)utf8
。这里的问题大概适用于VARCHAR(255)utf8mb4
。“解决方案”中有很多重叠,但我提供了一个可能更具体的解决方案。我不认为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修复了它