远程部署中,解决SQL错误(1071)Specified key was too long:max key length is 767 bytes,改变字段长度的详细步骤

SQL错误(1071)Specified key was too long:max key length is 767 bytes

这个报错信息的大概意思就是主键的长度超过了767bytes,注意,是主键

 

综合网上文章,解决方法有三种:(详述第三种)

1.查看数据库的字符集

我的不是字符集错误的原因,看了这么多文章之后加上实践觉得这个方法不太行,因此具体方法就不列出了

2.升级数据库版本

一般情况下能解决问题,如果之前设置的主键不是太长

因为mysql的版本升级后,支持的主键的字节长度也有增长

原文:767 bytes is the stated prefix limitation for InnoDB tables in MySQL version 5.6 (and prior versions). It's 1,000 bytes long for MyISAM tables. In MySQL version 5.7 and upwards this limit has been increased to 3072 bytes.
但是由于一些原因,我没被允许升级mysql的版本

3.修改数据库主键长度(即字段长度)

网络上有很多计算字段长度的文章,我这里就不赘言了,主要详述修改字段的过程.

我是在本地的数据库导出的sql,然后远程在别的服务器上创建数据库.在远程运行sql文件的时候报的标题中的错误.

(1)使用只含结构的sql文件

由于sql文件太大,不方便,因此我重新在本地导了一个只含结构,不含数据的sql文件,这样文件小很多,运行起来会比较快

(2)找出过长的字段

在远程使用的数据库工具是Heidisql,这个看报错日志很方便,但是如果有数据的大sql文件运行起来会很慢.

然后就是在远程的Heidisql中运行sql文件,运行的时候找到错误提示,然后就能找到是哪个表的主键超过长度,导致报错

改的时候记录是哪张表,一直改一直改(删除表,然后重建数据库,重新运行改过的新sql    或者清空表),直到不报错,能够成功运行整个sql文件.(我需要改的字段比较少,但是这可能是个笨办法,欢迎指正!!!)

(3)修改本地的表,重新导出含数据含结构的sql文件

照着前面记录下来的表名,去本地数据库修改这个表中超出长度的字段的长度.

然后重新导出sql文件,含数据含结构的.

(4)重新去远程导入sql文件

使用的数据库工具是navicat(Heidisql运行大sql文件很慢)

用完整的sql文件重新运行就好了

 

我知道这个方法比较麻烦,但是由于"居然还可以这么搞"的心理,还是记录下来了.

目前不知道有没有更好的办法.

欢迎批评指正.

 

参考文章:

https://blog.csdn.net/ljfphp/article/details/80406907

合理设置索引长度

https://blog.csdn.net/zhangyingchengqi/article/details/73249996

https://blog.csdn.net/songmaolin_csdn/article/details/72621357

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值