咨询电话:
15628812133
26
2024/09

数据库新增字段结果报错Row size too large 如何解决

发布时间:2024-09-26 14:04:01
发布者:已经写了
浏览量:
0

最新在更新项目的时候,需要对一些数据表增加几个新的字段。前面增加两个的时候还很正常没有出现异常情况,在增加的时候就开始报错了,报错的内容是Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.翻译翻译的意思就是:行大小太大(>8126)。将某些列更改为TEXT或BLOB,或使用ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED可能会有所帮助。在当前的行格式中,768字节的BLOB前缀是内联存储的。

普通翻译一下就是,单行数据的长度太长了,不允许在增加字段了,你可以把之前的字段类型改称text或者blob的格式来缩减长度然后在增加字段,但是这个解决方式有点不彻底,加的多的话还是解决不了。

这里直接就把彻底解决的方式解释一下,如果你的表使用的是REDUNDAN或者COMPACT的行格式,那么我们只需要把行格式改称DYNAMIC就可以了。

数据库的行格式根据不同的数据库系统可能有所不同。以下是MySQL中的四种行格式:

REDUNDANT(冗余行格式):

这是MySQL 5.0之前默认的行格式。

特点包括将前768字节的变长列值存储在B树节点的索引记录中,多余的部分存储在溢出页。

对于大于768字节的固定长度列,会被编码为可变长度列并可能存储在页面外。

这种格式在MySQL 5.0及之后的版本中逐渐被新的行格式所取代,但在某些系统表中可能仍然使用。

COMPACT(紧凑行格式):

MySQL 5.0及更高版本默认的行格式(在某些MySQL版本中,如MySQL 5.7,默认行格式可能已更改为DYNAMIC)。

与REDUNDANT相比,COMPACT行格式减少了存储空间的使用,并可能提高性能,尤其是在缓存命中率和磁盘速度有限制的情况下。

它也使用溢出页来存储超过768字节的列值,但整体存储结构更加紧凑。

DYNAMIC(动态行格式):

MySQL 5.7及更高版本的默认行格式(在启用了Barracuda文件格式的InnoDB存储引擎中)。

这种行格式支持更长的可变长度列和更大的索引键前缀,能够更好地处理大型数据集和复杂查询。

它将长列值完全存储在溢出页中,并在记录头中仅存储指向这些溢出页的指针,从而减少了记录头的大小并提高了存储效率。

COMPRESSED(压缩行格式):

类似于DYNAMIC行格式,但增加了对表和索引数据的压缩支持。

通过压缩数据,可以进一步减少存储空间的使用,但可能会增加CPU的使用率,因为数据在读取和写入时需要进行压缩和解压。

要使用COMPRESSED行格式,需要启用innodb_file_per_table选项,并确保InnoDB存储引擎使用的是Barracuda文件格式。

数据库新增字段结果报错Row size too large 如何解决


关键词:
返回列表