(一)问题描述
今天在创建一张数据库表,建成之后发现没有给open_id设置唯一索引,因此使用sql语句重新设置
CREATE TABLE tb_wechat_auth(
wechat_auth_id INT(10) NOT NULL AUTO_INCREMENT,
user_id INT(10) NOT NULL,
open_id VARCHAR(1024) NOT NULL,
create_time DATETIME DEFAULT NULL,
PRIMARY KEY(wechat_auth_id),
CONSTRAINT fk_wechatauth_profile FOREIGN KEY(user_id) REFERENCES tb_person_info(user_id)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
给open_id设置唯一索引:
ALTER TABLE tb_wechat_auth ADD UNIQUE INDEX(open_id);
但是数据库管理工具却报错:Specified key was too long; max key length is 767 bytes
(二)解决办法
在创建数据库表的时候报错
#1071 - Specified key was too long; max key length is 767 bytes
查阅相关资料找到原因:
mysql在InnoDB引擎下的主键索引或者Unique索引的最大长度为767bytes,在MyISAM下是1000bytes。
当时我在创建Unique索引的时候使用了一个varchar(1024)的字段,因为当时使用的是UTF-8编码的,
每个字符是3字节,1024>767,所以超出了767的长度,因此报错。
因此做了一些调整,将长度改为varchar(200)即可
另外还有其他解决办法:
1 要么改变表的字段大小,
2 要么升级mysql版本,
3 要么尝试改变不同的字符集