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 要么尝试改变不同的字符集

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值