Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MariaDB是否允许255个字符的唯一索引?_Mariadb - Fatal编程技术网

MariaDB是否允许255个字符的唯一索引?

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 将

我在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
  • VARCHAR
    上的
    255
    更改为
    191
    (假设您的值不太长)
  • ALTER。。转换为utf8
    ——但这不允许使用表情符号和一些中文
  • 使用“前缀”索引(不明智)
  • 重新配置(针对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(我发现这是最简单的解决方案),您可以在创建表时在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修复了它