在把SQL Server的数据库的数据迁移到达梦数据库时,当该条记录的某个字段含有的数据比较大时(该字段类型为VARCHAR2(4000))软件提示“记录超长”的错误。

该达梦数据表的大致结构如下(省略不相关字段):

字段名字段类型精度
MSG_IDINTEGER10
COLUMN_1VARCHAR24000
COLUMN_2VARCHAR24000

将该字段的长度改为VARCHAR2(8000),问题依然存在。

在“MD管理工具中”使用SQL语句该条记录同样提示“记录超长”的错误,这就排除了编码方式不同而导致的问题。

通过对该条语句插入的记录进行多次修改并测试,发现“记录超长”错误不是某个字段长度超过了定义的字段类型长度,而是该条记录的所有字段的值加在一起超过了一定长度。

这个“长度”是由数据库的页大小决定的,即达梦数据库中一行记录的所有字段的实际长度的和不能超过页大小的一半。

在达梦数据库中,一行记录所有字段长度累加不能大于下表:

数据库页面大小最大长度
4K1900
8K3900
16K8000
32K8188

查看数据库配置,发现该达梦数据的页大小为“8K”,所以会有上述问题。

解决方法

目前测试过的解决方法如下:

  1. 重新创建数据库,将数据库的页大小设为“16K”或以上;
    达梦数据页大小在创建数据库时设置,设定之后不能更改。
  2. 将字段类型改为TEXT、CLOB、BLOB等大字段。
    在数据库文件中,TEXT、CLOB、BLOB等大字段采用和普通字段不同的、特殊的存储方式,不占用该条记录的页大小。

标签: 数据库, 达梦, 记录超长, 页大小

仅有一条评论

  1. xd

    写的挺好

添加新评论