MySQL-建表错误

(一)问题描述

今天在创建一张数据库表,建成之后发现没有给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 要么尝试改变不同的字符集

猜你喜欢

转载自blog.csdn.net/JayBillions/article/details/81217291