Aria存储引擎表创建唯一哈希索引遇#1071错误如何解决?
解决Aria引擎表创建SHA-1列唯一哈希索引的#1071错误
错误原因
你遇到的#1071错误源于两个核心问题:
- SHA-1算法生成的哈希值是40位十六进制字符串,你指定的64位索引长度完全多余,且超出了Aria引擎允许的索引键长度上限;
- Aria引擎对哈希索引的键长度有严格限制,过长的键定义会直接触发该错误。
解决方案
1. 修正索引长度参数
直接使用SHA-1值的实际长度(40),或者省略长度参数(因SHA-1值长度固定),执行以下SQL:
ALTER TABLE `code` ADD UNIQUE `ix_code_url_sha` (`url_sha`) USING HASH;
如果你的url_sha列定义为更长的字符串类型(比如VARCHAR(255)),也可以明确指定前缀长度为40:
ALTER TABLE `code` ADD UNIQUE `ix_code_url_sha` (`url_sha`(40)) USING HASH;
2. 确认列定义有效性
确保url_sha列的长度至少为40(推荐用CHAR(40),SHA-1值长度固定,CHAR比VARCHAR更高效),如果列长度不足,先修改列定义:
ALTER TABLE `code` MODIFY COLUMN `url_sha` CHAR(40) NOT NULL;
额外说明
Aria引擎的哈希索引适合等值查询场景,对于SHA-1这类固定长度的唯一标识列,哈希索引能提供不错的查询性能。需要注意的是,Aria引擎不支持哈希索引的范围查询,若有此类需求,建议改用BTREE索引。
内容的提问来源于stack exchange,提问作者theking2
相关产品推荐
相关产品推荐

