Mysql 出现Error 1118 Row size too large. The maximum row size is 65535 的解决办法
(仅作记录,下面的解决步骤我试了一下还是会报同样的错误,问题没有解决,只好把varchar类型的大小挨个的改小了一点。若是哪位大神调好了,还请指点一二。)
解决步骤
1. 在MySQL的配置文件中添加:
[mysqld]
max_allowed_packet=16M
2. 在MySQL的配置文件中添加:
[mysqld]
innodb_file_per_table=1
3. 修改MySQL全局变量:
SET GLOBAL innodb_file_format='Barracuda';
4. 删除原表,创建一个新表,并设置表的属性:
ROW_FORMAT=COMPRESSED
例:
SET GLOBAL innodb_file_format='Barracuda';
SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `cdfd`;
CREATE TABLE `cdfd` (`Title_ZH` varchar(255) DEFAULT NULL COMMENT '中文题名',`Title_EN` varchar(255) DEFAULT NULL COMMENT '英文题名',`FileName` char(24) DEFAULT NULL COMMENT '文件名',...... ............ ......<pre name="code" class="sql"> `Author_Code` varchar(255) DEFAULT NULL,`Unit_Code` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
参考:(1)http://www.cnblogs.com/gaizai/archive/2012/09/20/2695663.html
(2)http://blog.csdn.net/arbel/article/details/8042050
(3)http://www.cnblogs.com/billyxp/p/3342969.html
一、背景
我们的MySQL数据库有一张10个Text的字段的表,还包括几个char和varchar字段,由于业务需求,我在表中加多一个Text字段的时候,插入记录的出现了下面的错误:
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
(图1:错误信息)
二、过程
首先我们执行下面的SQL,查看这个表的相关信息:
SHOW TABLE STATUS LIKE 'eventanalysis%';
(图:表信息)
从上面的这个表使用的Row_format是Compact,这个跟我们上面出现的错误有什么关系呢?
首先让我们来了解下Row_format的Compact,【MySQL技术内幕InnoDB存储引擎】书中的第4.4节(83-98页)中提到:
1. Compact行记录是在MySQL 5.0时被引入的,其设计目标是能高效存放数据。
2. Redundant是MySQL 5.0版本之前InnoDB的行记录存储方式。
3. InnoDB存储引擎可以将一条记录中的某些数据存储在真正的数据页面之外,即作为行溢出数据。一般认为BLOB、LOB这类的大对象列类型的存储会把数据存放在数据页面之外,这个理解有点偏差,BLOB可以不将数据放在溢出页面,而即使是varchar列数据类型,依然有可能存放为行溢出数据。
4. Oracle VARCHAR2最大存放4000个字节,SQL Server 最大存放8000个字节,MySQL的VARCHAR可以存放65535个字节。
5. TXET(一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。)
6. MEDIUMTEXT(一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。)
7. VARCHAR(N)中,N指的是字符的长度,VARCHARL类型最大支持65535指的是65535个字节。
8. 在Compact行记录中,数据页只保存数据的钱768个字节,实际数据保存在BLOB页中。
9. Barracuda文件格式下拥有两种新的行记录格式Compressed和Dynamic两种,新的两种格式对于存放BLOB的数据采用了完全的行溢出的方式,在数据页中只存放20个字节的指针,实际的数据都存放在BLOB Page中,而之前的Compact和Redundant两种格式会存放768个前缀字节。Compressed行记录格式的另一个功能就是存储在其中的数据会以zlib的算法进行压缩。
通过上面的一些了解,MySQL默认是使用Compact行记录的,所以我决定修改表结构,修改为Barracuda中的Compressed行记录。
在创建表的SQL语句中加入粗体内容:ENGINE=INNODB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8ROW_FORMAT=COMPRESSED;
(一) 执行创建表SQL的时候出现下面的错误信息:
0 row(s) affected, 2 warning(s)
Execution Time : 0.090 sec
Transfer Time : 1.066 sec
Total Time : 1.056 sec
Warning Code : 1478
InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_per_table.
Warning Code : 1478
InnoDB: assuming ROW_FORMAT=COMPACT.
(二) 根据上面的提示,设置innodb_file_per_table,重启MySQL后,再次执行创建表SQL,出现下面的错误:
135 row(s) affected, 2 warning(s)
Execution Time : 4.004 sec
Transfer Time : 1.064 sec
Total Time : 5.069 sec
Warning Code : 1478
InnoDB: ROW_FORMAT=COMPRESSED requires innodb_file_format > Antelope.
Warning Code : 1478
InnoDB: assuming ROW_FORMAT=COMPACT.
(三) 根据提示,执行下面的SQL:SET GLOBAL innodb_file_format='Barracuda';再次执行创建表的SQL,这次终于成功了,没有报错了。通过SQL:SHOW TABLE STATUS LIKE 'eventanalysis%';查看新表(eventanalysis4)信息:
(图:row_format)
三、解决步骤
1. 在MySQL的配置文件中添加:
[mysqld]
max_allowed_packet=16M
2. 在MySQL的配置文件中添加:
[mysqld]
innodb_file_per_table=1
3. 修改MySQL全局变量:
SET GLOBAL innodb_file_format='Barracuda';
4. 删除原表,创建一个新表,并设置表的属性:
ROW_FORMAT=COMPRESSED
四、知识点
ROW_FORMAT几个典型值:
ROW_FORMAT=COMPACT
ROW_FORMAT=REDUNDANT
ROW_FORMAT=COMPRESSED
ROW_FORMAT还有其他一些值:
DEFAULT
FIXED
DYNAMIC
COMPRESSED
REDUNDANT
COMPACT
五、参考文献
《MySQL技术内幕InnoDB存储引擎》
Exploring New Features in InnoDB Plugin-1.0
Issue with maximum row size in MySQL
max-allowed-packet
Innodb row size limitation
Mysql的row_format
mysql 5.1 innodb plugin压缩测试
MySQL字段类型详解
MySQL TEXT数据类型的最大长度
Mysql 出现Error 1118 Row size too large. The maximum row size is 65535 的解决办法相关推荐
- MySQL新增字段报错:ERROR 1118 -- Row size too large. The maximum row size for the used table type
MySQL新增字段报错:ERROR 1118 – Row size too large. The maximum row size for the used table type, not count ...
- Cannot create table [data_source]: 1118 - Row size too large. The maximum row size for the used tabl
1.问题 在导入mysql数据库时,报错: Cannot create table [data_source]: 1118 - Row size too large. The maximum row ...
- mysql text 最大长度 报错 Row size too large. The maximum row size for the used table type
数据类型长度如下 TINYTEXT 256 bytes TEXT 65,535 bytes ~64kb MEDIUMTEXT 16,777,215 bytes ~16MB LONGTEXT 4, ...
- oracle ||#039; where #039;||condition;,帝国cms后台添加字段提示#039;Row size too large. The maximum row size...
今天在帝国cms后台创建系统模型,添加字段时报了一个错误,ERROR 1118 (42000): Row size too large. The maximum row size for the us ...
- MySQL【问题记录 01】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
1.问题重现 CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varcha ...
- 1709 - Index column size too large. The maximum column size is 767 bytes.
1,mysql导入同事发的sql文件报如下错误:1709 - Index column size too large. The maximum column size is 767 bytes. 2, ...
- ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
MySQL版本5.6.35 在一个长度为512字符的字段上创建unique key报错 CREATE DATABASE dpcs_metadata DEFAULT CHARACTER SET utf8 ...
- Mysql 出现Error 1118的一种解决方法
首先声明,对mysql不懂,很多都不知道原因 设计了一个表,里面很多text字段,然后填进去的东西太多(用的是python的MySQLdb),报错: _mysql_exceptions.Operati ...
- “fatal error C1014:包含文件太多:深度 = 1024”的原因与解决办法
在定义变量,或文件名时,议定不要和系统关键字重名,否则容易引起错误. 错误信息: fatal error C1014:包含文件太多:深度 = 1024 原因分析与解决办法: 1.可能是两个或多 ...
最新文章
- 目标管理和任务协作,用智办事更方便
- ts watch路由 参数变化_vue watch 监听路由变化
- How to find documentation of given API
- 狭义上讲侠义计算机安全,狭义的会计电算化是什么
- 这七种回归分析技术,学了不后悔~
- python列表数据类型-入门学习
- 【Kalman】卡尔曼滤波器工作原理(Link)
- 如何使用Putty登录安装在VirtualBox里的ubuntu 1
- Android开发工具集合
- 一些可视化Javascript插件
- 电商网站项目总结(面向对象编程篇)
- 字符串匹配算法KMP详解
- python处理xps文件_如何在Windows 10系统中处理XPS文件
- 人工智能就是计算机科学的英文,AI(人工智能)的英文全称?AI指什么,包含什么?
- 计算机在流体力学中的应用,哈尔滨工业大学-工程流体力学课程
- 华为HG8347R V3R016C10S135光猫桥接 北京联通 恢复华为原版
- ecshop分类间隔变色_JS小案例:循环间隔重复变色
- K.论演员的自我修养---组合数的运用路径计数
- c#后台如何导出excel到本地_C#实现导出Excel
- Mac 电脑添加代理服务器
热门文章
- 程序员,请昂起你高贵的头
- 动态设置input设置只读属性
- EMNLP-21-TEBNER: Domain Specific Named Entity Recognition with Type Expanded Boundary-aware Network
- 感恩有你,我们大会见?
- ADV-168贪吃的大嘴
- uni-app 小程序文件下载并分享
- UE4如何将虚幻商城资源导入到自己的工程中+保管库的使用
- Activiti5学习笔记(二)
- arduino数字端口输出电压可驱动多大继电器呢_arduino传感器专辑之火焰(红外线)传感器模块...
- Qt快速读取Excel文件