本文于 11 天前发布,最后更新于 10 天前
一、问题描述
达梦数据库在初始化实例时会有一个参数PAGE_SIZE
即页大小,默认是8K。
配置不同的页大小,字段所支持的存储长度会有所不同,会有如下限制
数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录最大字段外其他字段总长度(字节) | 表空间单个数据文件最小 (MB)/最大 (MB) |
4 KB | 1938 | 2047 | 16/8388608 |
8 KB | 3878 | 4095 | 32/16777216 |
16 KB | 8000 | 8195 | 64/33554432 |
32 KB | 8188 | 16176 | 128/67108864 |
当表中一行记录所以字段长度之和占用页大小的一半时就会出现记录超长的报错。
二、问题解决
考虑到实际场景,解决方法有如下几种:
- 找到表中VARCHAR类型比较长的字段(如 VARCHAR(8000) 这种),修改成 TEXT 类型。
- 重新初始化数据库,把页大小配置成32KB。这是一个底层参数,在数据库生命周期内都不能更改,所以必须重新初始化。(对于表中 varchar2 类型较长,并且字段较多的情况不太适合,这种情况采用方法1解决)
- 尝试给表启用超长记录:
ALTER TABLE 模式名.表名 ENABLE USING LONG ROW;
注意
方法1中TEXT大字段是不参与问题描述中的长度计算的,大字段长度能够达到 2 GB。但是要注意,大字段的使用和普通字段是有区别的。