MySQL5.7(Linux)创建表报错:“Row size too large (> 8126). Changing some columns to TEXT or BLOB may help.”

博客讲述了在创建大型数据表时遇到的'Rowsizetoolarge'错误,分析了MySQL Innodb存储格式对大数据字段的影响,并分享了解决该问题的步骤,包括调整配置文件、增大max_allowed_packet和切换到Barracuda存储格式。还探讨了InnoDB和MyISAM两种存储引擎的差异,最终通过改变引擎为MyISAM成功创建表。
摘要由CSDN通过智能技术生成

今天在创建表的时候报错:“ Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.”

建表语句:

CREATE TABLE IF NOT EXISTS `test` (`_markid` VARCHAR(64),`__task_id` VARCHAR(32),`id` VARCHAR(40) COMMENT '自增id',`name` VARCHAR(20) COMMENT '学生名字',`english_name` VARCHAR(30) COMMENT '英文名',`birthday` VARCHAR(40) COMMENT '出生日期',`age` VARCHAR(40) COMMENT '学生年龄',`gender` VARCHAR(10) COMMENT '性别',`id_card` VARCHAR(20) COMMENT '身份证号码',`phone` VARCHAR(20) COMMENT '电话号码',`phonenumber_prefix` VARCHAR(5) COMMENT '手机号段',`email` VARCHAR(64) COMMENT '家庭网络邮箱',`year` VARCHAR(40) COMMENT '入学年份',`month` VARCHAR(20) COMMENT '随机月份',`century` VARCHAR(20) COMMENT '世纪',`school` VARCHAR(40) COMMENT '学校名称',`address` text COMMENT '家庭地址',`ip` VARCHAR(32) COMMENT 'IP地址',`credit_card` text COMMENT '完整信用卡信息',`score` VARCHAR(40) COMMENT '成绩',`height` VARCHAR(40) COMMENT '身高',`weight` VARCHAR(40) COMMENT '体重',`marital_status` VARCHAR(10) COMMENT '婚姻状况',`career` VARCHAR(20) COMMENT '职业',`work_unit` VARCHAR(50) COMMENT '工作单位',`job_nature` VARCHAR(20) COMMENT '工作性质',`trade` VARCHAR(20) COMMENT '行业',`first_degree` VARCHAR(25) COMMENT '学历',`salary` VARCHAR(25) COMMENT '薪资',`graduation_year` VARCHAR(40) COMMENT '毕业年份',`work_year` VARCHAR(40) COMMENT '工作年份',`work_experience` VARCHAR(40) COMMENT '工作年限',`hobby` VARCHAR(20) COMMENT '兴趣爱好',`credit_card_number` VARCHAR(20) COMMENT '信用卡号',`credit_card_provider` text COMMENT '信用卡类型',`credit_card_security_code` VARCHAR(10) COMMENT '信用卡安全码',`currency_code` VARCHAR(20) COMMENT '货币编码',`credit_card_expire` VARCHAR(20) COMMENT '信用卡到期日',`common_web_site` VARCHAR(20) COMMENT '常用网站',`time_online` VARCHAR(40) COMMENT '上线时间',`time_downline` VARCHAR(40) COMMENT '下线时间',`view_time` VARCHAR(40) COMMENT '浏览时长',`subject` VARCHAR(20) COMMENT '学科',`subject_code` VARCHAR(40) COMMENT '学科代码',`student_code` VARCHAR(40) COMMENT '学号',`chinese_grade` VARCHAR(40) COMMENT '语文成绩',`english_grade` VARCHAR(40) COMMENT '英语成绩',`math_grade` VARCHAR(40) COMMENT '数学成绩',`physics_grade` VARCHAR(40) COMMENT '物理成绩',`chemical_grade` VARCHAR(40) COMMENT '化学成绩',`biology_grade` VARCHAR(40) COMMENT '生物成绩',`historical_grade` VARCHAR(40) COMMENT '历史成绩',`politics_grade` VARCHAR(40) COMMENT '政治成绩',`geology_grade` VARCHAR(40) COMMENT '地理成绩',`physical_grade` VARCHAR(40) COMMENT '体育成绩',`arts_grade` VARCHAR(40) COMMENT '美术成绩',`music_grade` VARCHAR(40) COMMENT '音乐成绩',`color_name` VARCHAR(30) COMMENT '喜欢颜色',`library_record_id` VARCHAR(40) COMMENT '借书记录',`book_barcode` VARCHAR(40) COMMENT '图书条形码',`book_name` text COMMENT '书名',`call_number` text COMMENT '索书号',`library_cand_number` VARCHAR(40) COMMENT '借书证号',`department` VARCHAR(30) COMMENT '部门',`borrow_date` VARCHAR(40) COMMENT '借出日期',`should_return_date` VARCHAR(40) COMMENT '应还日期',`return_date` VARCHAR(40) COMMENT '归还日期',`living_area` VARCHAR(20) COMMENT '居住区域',`plot` VARCHAR(30) COMMENT '小区',`house_type` VARCHAR(30) COMMENT '户型',`towards` VARCHAR(20) COMMENT '朝向',`floor` VARCHAR(40) COMMENT '楼层',`decoration` VARCHAR(20) COMMENT '装修情况',`elevator` VARCHAR(20) COMMENT '有无电梯',`floor_space` VARCHAR(40) COMMENT '面积',`price` VARCHAR(40) COMMENT '价格',`discount` VARCHAR(40) COMMENT '折扣',`house_year` VARCHAR(40) COMMENT '房屋年份',`password` VARCHAR(40) COMMENT '个人密码',`uuid4` text COMMENT '个人随机码',`ipv4` text COMMENT 'IPV4',`ipv6` text COMMENT 'IPV6',`mac_address` text COMMENT 'MAC地址',`isbn10` VARCHAR(20) COMMENT '随机ISBN(10位)',`isbn13` VARCHAR(20) COMMENT '随机ISBN(13位)',`country` VARCHAR(30) COMMENT '国家名',`country_code` VARCHAR(10) COMMENT '国家代码',`province` VARCHAR(40) COMMENT '省份',`city` VARCHAR(40) COMMENT '城市名',`city_suffix` VARCHAR(20) COMMENT '城市的后缀',`district` VARCHAR(30) COMMENT '区',`postcode` VARCHAR(10) COMMENT '邮编',`street_address` text COMMENT '街道地址',`street_name` VARCHAR(40) COMMENT '街道名',`education` VARCHAR(40) COMMENT '学历',`major` VARCHAR(40) COMMENT '专业',`whether_recruitment` VARCHAR(40) COMMENT '是否统招',`test_num` VARCHAR(40) COMMENT '数据条数',`test_auth` VARCHAR(40) COMMENT '账号密码',`test_meta` text COMMENT '元数据文件',`sale_year` VARCHAR(40) COMMENT '销售年份',`sale_month` VARCHAR(40) COMMENT '销售月份',`sale_quarter` VARCHAR(40) COMMENT '销售季度',`sale_province` VARCHAR(30) COMMENT '销售省份',`sale_city` VARCHAR(30) COMMENT '销售城市',`sale_city_level` VARCHAR(20) COMMENT '销售城市级别',`restriction` VARCHAR(20) COMMENT '是否限购',`sale_region` VARCHAR(20) COMMENT '销售区域',`vehicle_models` VARCHAR(20) COMMENT '车辆型号',`production_place` VARCHAR(30) COMMENT '车辆产地',`enterprise_group` VARCHAR(20) COMMENT '企业集团',`enterprise_name` VARCHAR(50) COMMENT '企业名称',`manufacture_factory` VARCHAR(20) COMMENT '生产厂',`car_brand` VARCHAR(30) COMMENT '汽车品牌',`car_models` VARCHAR(20) COMMENT '车型',`car_types` VARCHAR(20) COMMENT '车辆类型',`car_level` VARCHAR(20) COMMENT '车辆级别',`car_dept` VARCHAR(20) COMMENT '车辆系别',`car_brand_attributes` VARCHAR(20) COMMENT '品牌属性',`car_body_type` VARCHAR(20) COMMENT '车身类型',`transmission_type` VARCHAR(20) COMMENT '变速器类型',`car_shift` VARCHAR(40) COMMENT '档位',`vehicle_displacement` VARCHAR(20) COMMENT '排量',`vehicle_displacement_cc` VARCHAR(40) COMMENT '排量cc',`intake_type` VARCHAR(10) COMMENT '进气方式',`seating_capacity` VARCHAR(40) COMMENT '乘员数',`fuel_types` VARCHAR(20) COMMENT '燃料种类',`energy_category` VARCHAR(20) COMMENT '能源类别',`guide_price_min` VARCHAR(40) COMMENT '指导价Min',`guide_price_max` VARCHAR(40) COMMENT '指导价Max',`bearing_form` VARCHAR(20) COMMENT '承载形式',`torque` VARCHAR(40) COMMENT '扭矩',`wheel_base` VARCHAR(40) COMMENT '轴距',`transmitter_model` VARCHAR(20) COMMENT '发动机型号',`emission_standard` VARCHAR(20) COMMENT '排放标准',`engine_made` VARCHAR(20) COMMENT '发动机产地',`engine_manufacturer` VARCHAR(20) COMMENT '发动机制造商',`engine_power` VARCHAR(40) COMMENT '功率',`curb_weight` VARCHAR(40) COMMENT '整备质量',`cross_weight` VARCHAR(40) COMMENT '汽车总质量',`car_length` VARCHAR(40) COMMENT '长',`car_width` VARCHAR(40) COMMENT '宽',`car_height` VARCHAR(40) COMMENT '高',`driver_type` VARCHAR(20) COMMENT '驱动型式',`driver_type_full_name` VARCHAR(20) COMMENT '驱动型式全称',`announcement_batch` VARCHAR(40) COMMENT '公告批次',`city_working_condition` VARCHAR(40) COMMENT '市区工况',`outskirts_working_condition` VARCHAR(40) COMMENT '市郊工况',`comprehensive_working_condition` VARCHAR(40) COMMENT '综合工况',`car_name` VARCHAR(20) COMMENT '车辆名称',`car_speed_max` VARCHAR(40) COMMENT '最高车速',`car_controlled_axis` VARCHAR(40) COMMENT '轴数',`car_tire_number` VARCHAR(40) COMMENT '轮胎数',`tyre_size` text COMMENT '轮胎规格',`front_tread` VARCHAR(40) COMMENT '前轮距',`rear_tread` VARCHAR(40) COMMENT '后轮距',`axle_load` VARCHAR(20) COMMENT '轴荷',`approach_angle_departure` VARCHAR(20) COMMENT '接近角与离去角',`front_back_suspension` VARCHAR(20) COMMENT '前悬与后悬',`spring_leaf_number` VARCHAR(40) COMMENT '弹簧片数',`ABS` VARCHAR(10) COMMENT '防抱死系统',`function` VARCHAR(10) COMMENT '使用性质',`ownership` VARCHAR(10) COMMENT '所有权',`body_color` VARCHAR(10) COMMENT '车身颜色',`sales_volume` VARCHAR(40) COMMENT '销量',`MSRP` VARCHAR(40) COMMENT 'MSRP',`price_tier` VARCHAR(20) COMMENT '价格段',`purchase_tax` VARCHAR(10) COMMENT '是否免征购置税',`single_double_row` VARCHAR(10) COMMENT '单双排',`motor_type` VARCHAR(20) COMMENT '驱动电机类型',`motor_model` VARCHAR(20) COMMENT '电机型号',`energy_storage_device_model` VARCHAR(20) COMMENT '储能装置型号',`energy_storage_device_type` VARCHAR(20) COMMENT '储能装置种类',`battery_manufacturer` VARCHAR(40) COMMENT '电池生产企业',`battery_energy_density` VARCHAR(40) COMMENT '电池能量密度',`clues_to_source` VARCHAR(20) COMMENT '客户信息来源',`interested_models` VARCHAR(40) COMMENT '意向车型',`interested_brand` VARCHAR(40) COMMENT '意向品牌',`budget_price_min` VARCHAR(40) COMMENT '价格预算Min',`budget_price_max` VARCHAR(40) COMMENT '价格预算Max',`car_use` VARCHAR(20) COMMENT '购车用途',`purchase_date` VARCHAR(40) COMMENT '购车时间',`referrer` VARCHAR(20) COMMENT '推荐人姓名',`referrer_phone` VARCHAR(20) COMMENT '推荐人联系电话',`referrer_email` VARCHAR(64) COMMENT '推荐人电子邮箱',`referrer_card_number` VARCHAR(20) COMMENT '推荐人卡号',`sales_consultant` VARCHAR(20) COMMENT '销售顾问',`sales_consultant_phone` VARCHAR(20) COMMENT '销售顾问电话',`sales_consultant_group` VARCHAR(20) COMMENT '销售顾问所在组',`agency_id` VARCHAR(40) COMMENT '经销商ID',`agency_name` VARCHAR(40) COMMENT '经销商名称',`agency_phone` VARCHAR(20) COMMENT '经销商电话',`agency_area` VARCHAR(20) COMMENT '经销商所在区域',`agency_level` VARCHAR(20) COMMENT '经销商级别',`agency_address` text COMMENT '经销商地址',`visit_number` VARCHAR(40) COMMENT '客户到店次数',`first_follow_time` VARCHAR(40) COMMENT '首次跟进时间',`recently_follow_time` VARCHAR(40) COMMENT '最近跟进时间',`wether_test_drive` VARCHAR(10) COMMENT '是否试乘试驾',`wether_follow` VARCHAR(10) COMMENT '是否继续跟进',`purchase_status` VARCHAR(10) COMMENT '购车状态',`license_plate` VARCHAR(20) COMMENT '车牌号码',INDEX `__task_id` (`__task_id`), PRIMARY KEY(`_markid`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
有大神分析原因是:
大致是因为mysql-innodb是按照page存储数据的,每个page max size是16k,然后每个page两行数据,所以每行最大8k数据。如果你的字段是blob之类的话,会存储在page之外的溢出区里。
1、innodb默认的approach(羚羊)存储格式会把每个blob字段的前864个字节存储在page里,所以你的blob超过一定数量的话,单行大小就会超过8k;
2、innodb的Barracuda(梭鱼) 存储格式对blob字段的处理方式是在page里头只存储一个20byte大小的指针,其它全存在溢出区,所以你轻易超不了8k;

网上搜索了很多方法,逐一试过之后都不适用,可能是大家情况不同,有作者对这几种方法都汇总了:https://blog.csdn.net/weixin_42024325/article/details/88994230
(但我逐一试过之后,依然没有解决,可能情况也不大相同的原因。最后把几种方案都综合了一下成功了,O(∩_∩)O哈哈~,在这里记录一下步骤)
我这里的MySQL是基于docker容器部署的,修改了配置文件,如果配置文件不正确,mysql服务器不来,进不去容器就没法修改配置了,只能重启一个CONTAINER了,这个比较难搞。
1. 拉取MySQL5.7镜像

docker pull mysql:5.7

在这里插入图片描述
2. 查看镜像

docker images

在这里插入图片描述
3. 创建并启动mysql服务

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD='123456' --name mysql mysql:5.7

在这里插入图片描述
4. 查看全部容器

docker ps -a

在这里插入图片描述
5. 进入mysql容器

docker exec -it “CONTAINER ID” /bin/bash

在这里插入图片描述
6. 进入mysql配置文件路径

cd  /etc/mysql/
ls

在这里插入图片描述
注:docker容器里没法使用vi命令,需要使用vim命令编辑文件,如果提示:“bash: vim: command not found”,则需要安装一下vim
在这里插入图片描述
安装步骤如下:

apt-get update

在这里插入图片描述

apt-get install vim

在这里插入图片描述
7. 编辑mysql配置文件my.cnf

vim my.cnf

添加如下内容:

[mysqld]
max_allowed_packet=16M
innodb_file_per_table=1
innodb_file_format=Barracuda
internal_tmp_disk_storage_engine=MyISAM

在这里插入图片描述
8. 保存配置,重启mysql服务

如果要退出bash有2种操作:
	1)Ctrl + d 退出并停止容器;
	2)Ctrl + p + q 退出并在后台运行容器;
重启mysql服务:
	docker restart “CONTAINER ID”

在这里插入图片描述
可使用 docker logs “CONTAINER ID” 查看docker容器运行日志(加上-f 可实时查看)
在这里插入图片描述
9. 再次进入mysql容器,连接mysql服务创建表成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS:后来发现这种方式还是不稳定,在删除表之后又创建不了了。。。
解决方案:
更改数据库引擎为MyISAM。即上述代码中Engine=MyISAM

这两种引擎的区别:

  1. https://blog.csdn.net/aschulianwuyanzu/article/details/77879665
  2. https://blog.csdn.net/qq_27607965/article/details/79925288
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值