mariaDB10.1版本 如何设置varchar(256)的字段为主键可以不报错ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
时间: 2023-10-13 17:08:24 浏览: 150
这个问题是由于 MariaDB 中索引长度限制导致的。在 MariaDB 10.2.2 之前的版本中,InnoDB 存储引擎的索引长度限制为 767 字节。如果您的表中定义的主键或唯一键的总长度超过了这个限制,就会出现 "Specified key was too long" 的错误。
解决这个问题的方法是在创建表时指定字符集为 utf8mb4,因为该字符集下一个字符最多占用 4 个字节,因此可以支持更长的索引长度。具体操作如下:
1. 在创建表时指定字符集为 utf8mb4。
```
CREATE TABLE my_table (
id INT NOT NULL AUTO_INCREMENT,
my_column VARCHAR(256) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY my_column_idx (my_column(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
2. 在创建唯一键时只使用前缀索引。
在上面的示例中,我在创建唯一键时使用了 `my_column(191)`,这意味着只使用 my_column 的前 191 个字符作为索引。这是因为 utf8mb4 字符集下,一个字符最多占用 4 个字节,191 个字符的总长度为 764 字节,不超过索引长度限制 767 字节。
这样,您就可以在 MariaDB 10.1 版本中设置 varchar(256) 的字段为主键而不报错了。
相关问题
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 字节,就可以避免上述错误了。
阅读全文