问题
在varchar(1000)上报错字符串截断,于是改为varchar(8000)仍然报错。
通过对该条语句插入的记录进行多次修改并测试,发现“记录超长”错误不是某个字段长度超过了定义的字段类型长度,而是该条记录的所有字段的值加在一起超过了一定长度。
这个“长度”是由数据库的页大小决定的,即达梦数据库中一行记录的所有字段的实际长度的和不能超过页大小的一半。
在达梦数据库中,一行记录所有字段长度累加不能大于下表:
数据库页面大小 | 最大长度 |
---|---|
4K | 1900 |
8K | 3900 |
16K | 8000 |
32K | 8188 |
解决方法
目前测试过的解决方法如下:
- 重新创建数据库,将数据库的页大小设为“16K”或以上;
达梦数据页大小在创建数据库时设置,设定之后不能更改。 - 将字段类型改为TEXT、CLOB、BLOB等大字段。
在数据库文件中,TEXT、CLOB、BLOB等大字段采用和普通字段不同的、特殊的存储方式,不占用该条记录的页大小。