mysql row too large_MySQL ERROR1118报错详解 Row size too large

ERROR1118的报错信息分为两种:

1、ERROR 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

一行最大记录长度是65535(定义到这个长度也会报错,行本身维护也会占用字节),建议使用text或blobs类型。

2、ERROR 1118 (42000): 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.

一条记录太长,超过了8126字节,建议部分列使用text或blob类型。

看到这两个报错信息,感觉描述的有些冲突,一个说一条记录最大长度 不超过65535字节,一个说长度不能超 过8126字节。

先看下官方文档的描述:

【The MySQL maximum row size limit of 65,535 bytes is demonstrated in the following InnoDB and MyISAM examples. The limit is enforced regardless of storage engine, even though the storage engine may be capable of supporting larger rows.】

在MYSQL数据库中一条记录的最大长度是65535字节,以下以Innodb和mysiam存储引擎为例,做了相关演示,不管任何存储引擎,都不能超过这个范围,即存储引擎支持一行存储更长的数据。

【InnoDB restricts row size (for data stored locally within the database page) to slightly less than half a database page for 4KB, 8KB, 16KB, and 32KB innodb_page_size settings, and to slightly less than 16KB for 64KB pages.】

Inodb存储引擎,对于4K,8K,16K和32K的页面大小,限制一条记录最多使用半个页面,,64K页面比16KB页面限制稍小一些。

小结:

一条记录最大长度65535字节是MySQLO数据库Server层面的限制,

默认情况下,Innodb页面大小是16KB,所以

一条记录在页面中的存储长度不能超过8126字节,

一条记录在页面中的存储长度不能超过8126字节,

一条记录在页面中的存储长度不能超过8126字节,(重要的事情说三遍)

这是Innodb存储引擎的限制。

这里可能会有些疑问,平常创建varchar(10000)类型字段,已经超过8126了

你可能感兴趣的:(mysql,row,too,large)