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

智能推荐

Duwamish7资料收集_duwamish7论文-程序员宅基地

文章浏览阅读333次。Duwamish7资料收集Duwamish深入剖析-结构篇:http://www.cnblogs.com/qiuyun/archive/2007/09/18/897815.html Duwamish架构分析篇:http://hi.baidu.com/wanglianbin/blog/item/c8f26e60a0c6e344eaf8f8a8.html_duwamish7论文

物料分类新增&更新_inv_item_category_pub.create_category-程序员宅基地

文章浏览阅读2.4k次。--新增INV_ITEM_CATEGORY_PUB.Create_Category ( p_api_version IN NUMBER, p_init_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE, p_commit IN VARCHAR2 DEFAULT FND_API.G__inv_item_category_pub.create_category

nvm介绍、nvm下载安装及使用-程序员宅基地

文章浏览阅读10w+次,点赞190次,收藏1.2k次。一、nvm介绍 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,nvm就是为解决这个问题而产生的,他可以方便的在同一台设备上进行多个node版本之间切换。二、nvm下载安装及使用2.1 nvm下载安装包下载地址:https://github.com/coreybutler/nvm-windows/releases,windows系统下载..._nvm

安装rvm 导公钥出错gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3-程序员宅基地

文章浏览阅读4.3k次。[root@master 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3gpg: 已创建目录‘/root/.gnupg’gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立gpg: 警告:在‘/root/.gnupg/gpg...._gpg --keyserver hkp://keys.gnupg.net --recv-keys 409b6b1796c275462a170311380

NAS—IIS虚拟目录_nas文件 添加到iis虚拟目录-程序员宅基地

文章浏览阅读6.1k次。之前项目中有上传图片视频等资源的功能,都是把资源上传到解决方案的目录下,如果越来越多站的空间也越来越大,实在不可取。后来用到了NAS这样一个东西,一个网络存储器,感觉像一个云盘的实体。把所有的资源放在NAS中,方便很多。 1、NAS NAS(Network Attached Storage)网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因_nas文件 添加到iis虚拟目录

超详细Eclipse安装教程-程序员宅基地

文章浏览阅读10w+次,点赞116次,收藏619次。超详细Eclipse安装教程_eclipse安装教程

随便推点

用于小物体检测的切片辅助超推理SAHI实现YOLOv8推理-程序员宅基地

文章浏览阅读3.4k次,点赞7次,收藏74次。如下图所示,在推理过程中采用了切片法,最初,原始图像被划分为尺寸为M×N的重叠块。通过结合使用调整大小的补丁和原始图像,模型可以学习到适应不同尺度的物体,并提高对大型物体的检测能力。然而,由于网络的局限性,学习到的特征可能无法充分捕捉到较小物体的微妙而复杂的细节。预训练模型,尤其是使用深度卷积神经网络(CNN)架构的模型,可以捕获丰富的分层特征,这对于小物体的检测非常有帮助。SAHI的独特之处在于它能够与任何物体检测器无缝集成,无需繁琐的微调,并在不影响性能的情况下快速应用,为小物体检测带来了重大的突破。_sahi

详解MNIST数据集下载、解析及显示的Python实现-程序员宅基地

文章浏览阅读2.7w次,点赞98次,收藏249次。MNIST 数据库是一个大型手写数字数据库(包含0~9十个数字),包含 60,000 张训练图像和 10,000 张测试图像,通常用于训练各种图像处理系统。训练数据集取自美国人口普查局员工,而测试数据集取自美国高中生。所有的手写数字图片的分辨率为28*28。数据集MNIST中的文件名下载地址文件大小训练集图像9912422字节训练集标签28881字节测试集图像1648877字节测试集标签4542字节。_mnist数据集下载

redis删除指定前缀的缓存-程序员宅基地

文章浏览阅读1k次。redis作为缓存服务器为MySQL数据库提供较高的防御性,对于一些数据的查询可以直接从缓存中可以进行查询。但是,某些情况下,我们需要清除缓存。以下场景:公司经常做活动,每个活动都存在大量的数据。在新活动进行测试的时候,也会产生一些缓存,但是删除这些缓存如果不能批量删除就有点烦了。在写活动的时候,为了保证活动的缓存不冲突,用自己姓名的前缀及活动的英文名作为前缀。缓存在很大程度上能够..._redis清理以某个字符串开头的缓存

vue报错 vue-cli 引入 stylus 失败-程序员宅基地

文章浏览阅读245次。1.1.1. vue-cli 引入 stylus 失败先通过vue-cli的webpack模板建立文件夹:vue init webpacktest-stylus然后安装依赖npminstall再然后 安装stylus stylus-loader style-loadernpminstallstylus stylus-loaderstyle-loade..._error do not use a triple slash reference for vite/client, use `import` styl

Servlet+JSP(九):Cookie 学习,2024年最新阿里巴巴飞猪面试-程序员宅基地

文章浏览阅读763次,点赞18次,收藏20次。本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!MySQL50道高频面试题整理:网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!

在vue中使用海康web3.2插件连接云台摄像机_vue3 海康 mousedownptzcontrol(iptzindex)-程序员宅基地

文章浏览阅读351次。在index.html文件中先引入需要的脚本。创建一个摄像机组件(复制粘贴直接可用)_vue3 海康 mousedownptzcontrol(iptzindex)

推荐文章

热门文章

相关标签