Mariadb 10.1版本 导入sql时 报错[ERR] 1071 - Specified key was too long; max key length is 767 bytes
时间: 2023-10-13 22:16:21 浏览: 164
这个错误通常是由于字符集和排序规则导致的。在MariaDB 10.1版本中,如果使用utf8mb4字符集,最大的键长度只能是191个字符(即767个字节)。如果超过这个限制,就会出现这个错误。
解决这个问题的方法有两种:
1. 修改字符集和排序规则
可以修改表的字符集和排序规则,将其改为utf8或者latin1,这样就可以解决这个问题。但是,这种方法不适用于需要使用utf8mb4字符集的情况。
2. 修改配置文件
在my.cnf配置文件中添加以下内容:
```
[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=true
```
然后重启MariaDB服务即可。
这样做的原因是,innodb_large_prefix选项可以允许更长的键长度,innodb_file_format=barracuda选项可以支持更大的页大小,从而支持更长的键长度。innodb_file_per_table选项可以让每个表都使用单独的文件,从而避免文件大小限制的问题。
注意:在修改my.cnf配置文件之前,最好备份一下该文件,以免修改出错导致MariaDB无法启动。
相关问题
Mariadb 10.1版本 导入sql 字符集为utf8为何还会报错 1071 - Specified key was too long; max key length is 767 bytes
这是因为 MySQL 的 InnoDB 存储引擎使用了 B-tree 索引算法,而对于 utf8 编码的字符集,一个字符需要 3 个字节来存储。因此,当你在创建索引时,如果字段长度超过了 255 个字符,那么就会出现 "Specified key was too long; max key length is 767 bytes" 错误。
解决方法有以下两种:
1. 修改字符集为 utf8mb4,它可以支持更长的字符长度。你可以执行以下命令:
```
ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
2. 如果你需要继续使用 utf8 字符集,那么可以通过修改配置文件来解决。在 my.cnf 文件中添加以下内容:
```
[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = 1
```
然后重启 MySQL 服务器即可。这样可以将索引长度扩展到 3072 字节,就可以避免上述错误了。
Mariadb 10.1版本 导入sql 字符集为utf8 参数innodb_large_prefix=true 报错 Specified key was too long; max key length is 767 bytes
这个错误通常是因为在使用utf8字符集时,创建的索引长度超过了767字节的限制。这是因为InnoDB存储引擎在使用utf8字符集时,一个字符最多占用3个字节,而索引长度的限制是767字节,因此最多只能创建255个字符长度的索引。
解决这个问题有两种方法:
1. 修改字符集为utf8mb4,这样一个字符最多可以占用4个字节,可以创建更长的索引。在创建表时,可以指定字符集为utf8mb4,例如:
```
CREATE TABLE `table_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name_index` (`name`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```
2. 将innodb_large_prefix参数设置为true,这样可以允许创建更长的索引。在创建表之前,可以在my.cnf文件中添加以下配置:
```
[mysqld]
innodb_large_prefix=true
```
然后重启Mariadb服务器。
注意:修改字符集或者设置innodb_large_prefix参数可能会影响现有的数据,需要谨慎操作。同时,修改字符集时需要确保客户端也使用相同的字符集进行连接。
阅读全文