我为两列定义了一个唯一约束:一个 bigint 和一个 VARCHAR(256) COLLATE utf8mb4_unicode_ci
然后发生了这个错误(我已经很熟悉了):
Specified key was too long; max key length is 767 bytes
然后我尝试将 VARCHAR 列的长度设置得尽可能高而不会出错。
令我惊讶的是,MySQL 允许我将长度更改为 191,但这意味着索引的长度为 8+191*4=772 字节,但错误提示只允许使用 767 字节。
这是表格:
CREATE TABLE `file_content`
(
`file_content_id` bigint(20) NOT NULL AUTO_INCREMENT,
`local_filename` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`directory_id` bigint(20) NOT NULL,
...
PRIMARY KEY (`file_content_id`),
UNIQUE KEY `fc_dir_name` (`directory_id`,`local_filename`),
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
我正在使用 MySQL 5.5.27