小兵超人 发表于 2024-11-8 01:11:13

MySQL报错1118,数据类型长度过长问题及解决

MySQL报错1118,数据类型长度过长

MySQL是世界上最流行的开源关系型数据库管理系统。
MySQL提供了许多功能,从简单的数据查询到复杂的数据操作和管理。
在MySQL的使用过程中,我们时常会遇到各种问题,其中一个比较常见的问题是报错1118。
接下来,我们将讲解MySQL报1118错误的原因和解决方法。
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”。这个错误的意思是,在创建表时,某些列的长度相加超过了MySQL所允许的最大行长度65535。在计算行长度时,除去BLOB类型的列的长度,还要加上行存储的开销。
出现这个错误的原因是我们创建的表结构中包含了太多的长文本类型(如VARCHAR、TEXT),而没有足够的空间来存放其它列。
对于VARCHAR类型的列,MySQL需要为其分配额外的空间,以适应其变化的字符串长度。所以,当我们在表中使用大量VARCHAR类型的长文本时,会导致出现1118错误。

解决这个问题

我们可以采用两种方法:
一种是使用TEXT或BLOB类型的列替换VARCHAR类型的列。
由于TEXT和BLOB类型的列不需要额外的存储空间,所以可以避免出现1118错误。
但是需要注意的是,这些列不支持索引、排序、或者通配符查询。
/**
*创建表的时候,大概有170+的字段大部分的字段varchar(255)的长度,
之前是以为字段名太长的文字,然后到网上查找把varchar替换成text类型,也没有尝试,
我直接删除一般的字段,表创建成功,
因为MYSQL所允许的最大长度为65535这个只是虚拟的长度但是实际长度完全没有这么长,
我估计也只有5万多长度
因为字段都很重要,所以我把所有的255长度全部更改成100长度最终创建表成功!!!
*/
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/328522rb8.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MySQL报错1118,数据类型长度过长问题及解决