MySQL中建表,提示了这个错误,

SQL 错误 [1118] [42000]: 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

从说明来看,写得很清楚了,"Row size too large"行定义太长了。

MySQL数据表存储数据,需要根据表结构中字段的数据类型和长度来分配存储空间。每条记录的大小必须小于或等于MySQL的最大行大小限制。如果表的行大小超过了这个限制,就会出现"Row size too large"的错误。

MySQL的最大行大小限制由多个因素决定,包括表的存储引擎、MySQL版本等。在InnoDB存储引擎中,默认的最大行大小为65535字节。这个大小包括了所有的列数据、行头和一些其它的开销。

解决方案有几种。

方案1. 减少列的数量和大小

尽量减少表结构中列的数量和大小。可以考虑删除一些不必要的列或者将一些较长的列改为较短的数据类型。

方案2. 使用TEXT或BLOB类型存储大文本数据

如果表中包含较大的文本数据,可以将对应的列的数据类型改为TEXT或BLOB类型。这些类型的数据在存储时不会被计入行大小的限制。

方案3. 调整InnoDB的配置参数

可以通过调整InnoDB的配置参数来增加最大行大小限制。例如修改innodb_file_format、innodb_file_per_table和innodb_large_prefix等参数。

SET GLOBAL innodb_file_format = Barracuda;
SET GLOBAL innodb_file_per_table = ON;
SET GLOBAL innodb_large_prefix = 1;

个人建议推荐方案是1>2>3。

如果一张表所有字段长度达到了65536个字节,除非有特定场景,否则听起来,这就不是很合理,需要存什么信息,能存这么多?表结构设计上,是否符合范式?这些都需要考虑。即使实际场景,就需要存储这么多内容,建议用TEXT、BLOB这些数据类型。改系统参数,毕竟影响全局,还是要考虑,改动所带来各方面的影响,综合决策才行,不能仅仅为了这么一个场景,而且不太了解参数背景的前提下,就改个全局参数,很容易出现不可控的问题。

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"