MySQL:1118 - Row size too large(行大小不能超过 65535 问题)

这篇具有很好参考价值的文章主要介绍了MySQL:1118 - Row size too large(行大小不能超过 65535 问题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

  • 当我们创建表或新增字段时,我们可能遇到下面这个问题:
1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. 
This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
  • 大概的意思是说:行的大小过大,最大限制为 65535 ,其中不包括 TEXT or BLOB 类型,建议调整一些列为 TEXT or BLOB 类型。
  • 下面我们来具体分析一下这个问题,并探讨如何解决。

原因

  • MySQL 行大小最大限制为65535,不包括TEXT、BLOB。

  • 注:如果未启用严格 SQL 模式, VARCHAR长度规范大于 65535 的列将转换为 TEXT, VARBINARY长度规范大于 65535 的列将转换为 BLOB。否则,在这两种情况下都会发生错误。

  • 参考:MySQL 5.7 官方文档:13.1.18.6 Silent Column Specification Changes

问题复现

环境 & 版本

SELECT VERSION();

5.7.36-log

复现过程

  • 尝试创建一个表 “tb_test”:
CREATE TABLE tb_test (
	row1 VARCHAR ( 10000 ) DEFAULT NULL,
	row2 VARCHAR ( 10000 ) DEFAULT NULL,
	row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;

// 创建失败
1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. 
This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs

// 为什么创建失败
tb_test 使用 CHARSET = utf8,每个编码字符占 3 个字节
则 tb_test 行长度为:1000 * 3 * = 90000 字节 > 63335
因此创建表失败

解决方案

调整列大小

  • 调整列大小使行大小 <= 65535。
CREATE TABLE tb_test (
	row1 VARCHAR ( 10000 ) DEFAULT NULL,
	row2 VARCHAR ( 10 ) DEFAULT NULL,
	row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;

tb_test 行长度为:10000 * 3 * 2 + 10 *3  = 60020 字节 < 63335

// 创建成功
CREATE TABLE tb_test (
	row1 VARCHAR ( 10000 ) DEFAULT NULL,
	row2 VARCHAR ( 10 ) DEFAULT NULL,
	row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8
> OK
> 查询时间: 0.087s

调整列类型

  • 调整其中部分列类型为 TEXT or BLOBs(不计入行大小),使行大小 <= 65535。
CREATE TABLE tb_test(
	row1 VARCHAR ( 10000 ) DEFAULT NULL,
	row2 text DEFAULT NULL,
	row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8

将 row2 调整为 text 类型
tb_test 行长度为:10000 * 3 * 2 = 60000 字节 < 63335

// 创建成功
CREATE TABLE tb_test(
	row1 VARCHAR ( 10000 ) DEFAULT NULL,
	row2 text DEFAULT NULL,
	row3 VARCHAR ( 10000 ) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8
> OK
> 查询时间: 0.023s

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。文章来源地址https://www.toymoban.com/news/detail-812457.html

到了这里,关于MySQL:1118 - Row size too large(行大小不能超过 65535 问题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 的 TCP 连接数量最大不能超过 65535?

    在使用 TCP/IP 协议时,会遇到一个经典的问题:TCP 连接数量最大不能超过 65535。这是因为 TCP 协议头中的端口号是 16 位的,因此最大只能表示 65535 个端口号。那么,服务器又是如何应对百万千万的并发连接的呢? Linux TCP 连接数量最大不能超过 65535 在理解如何处理大量并发连

    2024年02月09日
    浏览(26)
  • Result window is too large, from + size must be less than or equal to: [10000] but was

    做分页查询,当分页达到一定量的时候,报如下错误: 原因分析: es对from + size的大小进行限制,必须小于等于10000。 方案一(有风险) 将max_result_window参数阈值调大,在业务中限制分页大小,使from+size=10000; 具体操作 改法一: 动态更改索引设置,为max_result_window参数赋值足够

    2024年02月16日
    浏览(32)
  • 微信小程序上传代码, Error: 分包大小超过限制,main package source size 4732KB exceed max limit 2MB

    (1)新建文件夹pagepart (2)文件夹新建页面 (3)修改app.json 结束 目前就分包完成了 可以在微信开发者工具 详情基本信息中查看当前分包大小 (1)用画图软件打开照片,把数值改小 总结 可以右击查看属性,查看照片的的大小 要是有什么写的不对的地方,请大佬多多指教

    2024年02月16日
    浏览(58)
  • 为什么MySQL单表不能超过2000万行?

    摘要: MySQL一张表最多能存多少数据? 本文分享自华为云社区《为什么MySQL单表不能超过2000万行?》,作者: GaussDB 数据库 。 最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。 文中提到,他朋友在面试的过程中说,自己的

    2024年02月05日
    浏览(42)
  • 解决Data too long for column ‘xxx‘ at row 1问题以及深入理解mysql的字符串数据类型(char,varchar,enum,text,longtext...)

    今天在测试环境新增数据时,报出如是错误: Data too long for column \\\'apply_service_type\\\' at row 1 。 为了复现这个问题,我特地在本地数据库中增加如下 test 表:

    2023年04月17日
    浏览(38)
  • Nginx报错 HTTP 413 Request Entity Too Large(Payload Too Large)解决方案

    上传文件时,请求参数过大,导致超出服务端限制。 客户端发送的实体主体部分比服务器能够或者希望处理的要大。  Nginx默认最大能够上传1MB文件,打开nginx.conf在http{}中,找到server{}设置: client_max_body_size 30m;(配置客户端请求实体最大值) client_body_buffer_size 128k;(配置请

    2024年02月07日
    浏览(44)
  • Data too long for column ‘xxxx‘ at row 1 解决办法

    很简单的啦,往下看 Data too long for column ‘xxxx’ at row 1 第一种情况就是很普遍的,xxx字段长度不够 就是用Mybatis映射文件xml,字段匹配顺序错误即 原来很短的一个列,插入了很长的数据 就是数据库字符集的问题 重新设置字符串长度 仔细看一眼sql,就能排错 PS: 前端提出来

    2024年02月07日
    浏览(32)
  • 413 Request Entity Too Large

    字面意思很简单,就是文件太大了 先说解决方法!!! 如果是使用NGINX做代理,NGINX默认最大上传是1M如果超过就无法上传。 可以在配置写入如下: 在最后加上 client_max_body_size 100m; ,记得最后带上分号结束。 本来在本地调试页面时候,因为自己服务器本身带宽就很小,上传

    2024年02月10日
    浏览(32)
  • elasticsearch Data too large问题解决

    现象: 1、钉钉上收到es集群监控告警,集群变为yellow 2、kibana上没有数据,打开索引管理报以下错误: 解决: 1、修改config目录下jvm配置文件中关于jvm的参数 2、重启es集群 2.1 如果分片有副本的话,重启过程中,要临时关闭分片复制功能。 每个结点重启时,ElasticSearch集群的

    2024年02月07日
    浏览(32)
  • 413 Request Entity Too Large问题解决方法

    最近我们有个小程序需求是现场拍照提取照片中的有效信息,上传图片只能通过现场拍照,由于目前手机像素普遍较高,导致上传接口出现413 Request Entity Too Large,上传文件过大引起nginx代理报错。 针对这个问题,解决方案是: 项目配置文件修改,比如springboot项目中的applic

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包