mysql导入报错1071_导入sql文件报错:1071 Specified key was too long; max key length is 767 bytes...-程序员宅基地

技术标签: mysql导入报错1071  

一、背景

今天把服务器的数据库导出了一份sql文件,准备导入到本地,但是在导入的时候,报了个错:

Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

这就很奇怪了,明明服务器上都可以,凭什么我这边就报错呢。

二、错误分析

1、错误部分的sql文件

CREATE TABLE `model_has_permissions` (

`permission_id` int(10) unsigned NOT NULL,

`model_id` int(10) unsigned NOT NULL,

`model_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,

PRIMARY KEY (`permission_id`,`model_id`,`model_type`),

KEY `model_has_permissions_model_id_model_type_index` (`model_id`,`model_type`),

就是这个primary key部分报错的。错误信息的意思是,设置的键长超过了767 bytes。

2、这个767 bytes是什么玩意?

答:

(1)

在mysql 5.5.3之前,mysql的InnoDB引擎,要求设置的主键长度不得超过767bytes。

mysql的MyIsam引擎的主键长度不得超过1000 bytes。

(2)

在mysql中,gbk字符集会占用2个字节。utf8字符会占用3个字节。

而且从mysql5.5.3之后的版本,mysql 开始支持utf8m4字符,代表着一个字符占用4个字节。

也就是说:

(255+10+10)*3 = 825 //在用utf8作为字符集的时候,超过了规定的767 bytes

(255+10+10)*2 = 550 //当该用gbk作为字符集的时候

(255+10+10)*4 = 1100 //当用utf8m4作为字符集的时候,也超标了

3、大致原因知道之后,查看sql文件

(1)、数据库使用的InnoDB引擎

(2)、数据库使用utf8m4作为字符集

三、解决办法

1、修改字符长度

//根据上面的分析可以进行计算,我的主键长度不能超过192

768/4 = 192

但这样很明显是不符合的需求的,不能随便改动数据库的字段!

2、升级mysql

这个方案是在查询服务器数据库版本的时候,发现服务器数据库采用的是mysql5.7版本。。也就是说在升级数据库之后,是完全可以达到的。。

原文:

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.

1

原文的意思是说,在mysql的5.5.3版本之前,InnoDB引擎的主键对应的最大字节数是767字节,MyISAM对应的主键最大字节是1000字节。但是在mysql5.7版本之后,最大主键字节增大为3072字节。

OK,这样就很明显了,升级mysql是最佳的选择。用集成环境的小伙伴可以关闭集成环境中的mysql,然后下载最新的mysql版本即可。

四、在解决问题时,学到的东西

1、查看数据库的存储引擎

//进入数据库,执行这个命令

show variables like '%storage_engine%';

2、查看当前数据库的字符编码

show variables like '%character_set%';

1

3、查看数据库的版本号

//进入数据库之后,执行status即可

mysql>status

4、关于varchar

MySQL5.0.3之前varchar(n)这里的n表示字节数

MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个

5、关于用varchar作为主键,不好的地方

varchar相对于int来说占用磁盘空间多,磁盘io也会多,然后内存带宽也会多。这点上尤其在innodb更为明显,innodb表的Secondary index的 leaf page中都要保存primary key的值,主键如果是varchar,会导致secondary index的体积会比较大。而且varchar主键在比较上也会慢一些,插入时容易发送数据的非顺序插入,导致碎片,index tree效率比int低

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39841572/article/details/113251789

智能推荐

STM32F103 之TFT显示屏动态显示数据_tft屏幕打印动态-程序员宅基地

文章浏览阅读8.9k次,点赞12次,收藏58次。之前有个朋友问过,stm32在使用TFT显示屏的时候,知道如何显示一个数据,但是类似传感器这种数据的显示,是需要实时显示的,但是不知道如何刷新,他一开始使用的是clear()清屏函数,确实有点暴力,但是效果不咋地,而且网上查了一下也似乎没有很好的解答。于是我自己去试了一下,其实我之前也不怎么用显示屏的,所以具体其他方法我也没有深入研究,不过通过查看了显示屏的一些封装函数,想到了一种解决方案,就是在显示时使用叠加模式,显示数据之后,加一个延时,画上一个遮挡区域,再显示下一个数据,这样就可以实现显示屏上显示_tft屏幕打印动态

IOS开发指南之swift字典操作_ios swift 字典-程序员宅基地

文章浏览阅读238次。4.可为空类型与动态添加键与值。_ios swift 字典

高精度计算_高精度计算为什么要倒序存储-程序员宅基地

文章浏览阅读5.2k次,点赞22次,收藏46次。重点:高精度数的读入与输出高精度数的加减乘除难点:高精度数的除法高精度计算的优化为什么要用到高精度计算?intlong longdouble等进行计算的精度只有十几位,如果要进行数十、百、千、万位的数的计算就要用到高精度计算..._高精度计算为什么要倒序存储

vue element MessageBox.prompt this.$prompt组件禁止显示右上角关闭按钮,取消按钮,及点击遮罩层关闭_this.$prompt 取消按钮-程序员宅基地

文章浏览阅读957次,点赞7次,收藏8次。vue element MessageBox.prompt this.$prompt组件禁止或取消显示右上角关闭按钮,取消按钮,及点击遮罩层关闭。_this.$prompt 取消按钮

2020 北京积分落户结果公示,落户指标最多的公司竟然又是 ?-程序员宅基地

文章浏览阅读4.1k次。作者 | 石头哥来源 | 程序猿石头(id:tangleithu)图 by:石头@泸沽湖背景就在昨天,一年一度的北京积分落户结果出来了,我们照旧来看看今年(2020年)的数据情况。在看这..._北京户口指标分给哪些企业

Elasticsearch 与传统关系型数据库的对比、倒排索引原理解析_倒排索引和数据库的对应关系-程序员宅基地

文章浏览阅读5.2k次,点赞2次,收藏16次。Elasticsearch使用一种称为倒排索引的结构,她适用于快速的全文搜索。 一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。示例:1、假设文档集合包含五个文档,每个文档内容表所示,表的最左端一栏是每个文档对应的文档编号,我们的任务就是对这个文档集合建立倒排索引。 文档编号 文档内容 1 谷歌地图之父跳槽Faceboo..._倒排索引和数据库的对应关系

随便推点

3位十年编程大师,亲授十六种编程算法绝学,助你走上成神之路_it绝学-程序员宅基地

文章浏览阅读619次。3位十年编程大师,亲授十六种编程算法绝学,助你走上成神之路_it绝学

我的架构梦:(六十九) 消息中间件之RabbitMQ的安装与配置_logrotate rabbitmq-程序员宅基地

文章浏览阅读207次。一、安装环境1、阿里云主机2、操作系统:centos-release-7-8.2003.0.el7.centos.x86_643、Erlang:erlang-23.0.2-1.el7.x86_644、RabbitMQ:rabbitmq-server-3.8.5-1.el7.noarchRabbitMQ的安装需要首先安装Erlang,因为它是基于Erlang的VM运行的。RabbitMQ需要的依赖:socat和logrotate,logrotate操作系统中已经存在了,只需要安装socat就可以了_logrotate rabbitmq

kali虚拟机网卡配置文件_kali网卡配置文件-程序员宅基地

文章浏览阅读1.2w次,点赞21次,收藏64次。说起linux的网卡配置文件,大家第一时间想起的就是/etc/sysconfig/network-scripts/ifcfg-网卡名称但是kali虚拟机就不一样,接下来我给说一下kali虚拟机网卡配置文件路径/etc/network/interfaces1.配置文件解读auto eth0 # auto表示开机启动该网卡设备iface eth0 inet dhcp # 使用dhcp分配地址 (如果使用..._kali网卡配置文件

1024丨奈学教育致敬程序员:‘3+2’战略发布会圆满落幕_奈学教育,踢开30+程序员的职场焦虑#互联网#职业教育-程序员宅基地

文章浏览阅读302次。2020年10月24日程序员节当天,由奈学教育举办的“致敬程序员:‘3+2’战略发布会”在云端成功召开。此次发布会全程采用线上直播形式面向全网观众,奈学教育创始团队、大咖级讲师齐聚线上,为全网技术爱好者和众多学员带来了奈学品牌升级、课程升级、架构/大数据能力图谱发布、小程序发布、1024致敬程序员狂欢等一系列精彩环节。活动中,奈学教育创始人兼CEO(前58集团技术委员会主席)孙玄、前58集团技术委员会主席沈剑、奈学教育联合创始人(前华为终端硬件研发专家)姚劲,分别亮相直播间并带来主题演讲,从行业、技术、能_奈学教育,踢开30+程序员的职场焦虑#互联网#职业教育

html链接加入qq群,获取QQ群加群链接-程序员宅基地

文章浏览阅读4.7k次。# 获取QQ群加群链接> 获取QQ群三种一键加群链接:电脑端无弹窗直接加群。## 请求地址> https://api88.net/api/qun/## 请求方式> GET## 请求参数| 参数名 | 值 || --- | --- || guin | 群号 || type | 类型(此参数为空时输出json数据;当此参数为以下值,将直接302重定向..._加群html

CMakeLists.txt中常用库文件的查找和链接_libactionlib.so-程序员宅基地

文章浏览阅读6.9k次,点赞6次,收藏29次。大家好,我已经把CSDN上的博客迁移到了知乎上,欢迎大家在知乎关注我的专栏慢慢悠悠小马车(https://zhuanlan.zhihu.com/c_1132958996826546176)。以后,我会把日常的思考放在CSDN上,梳理过的精华文章放在知乎上,希望大家可以多多交流,互相学习。目录CMake链接库的基本套路OpenCVBoostROS catkinEigeng..._libactionlib.so