暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM达梦数据库字符串截断、超长文本截取

原创 达梦 2021-01-31
11764
  • 执行 INSERT 时报错

一般此类问题是由于目标表存在一个(或多个)字段长度不够,导致插入失败。重点关注 CHAR、VARCHAR 字段的长度,可以创建一个具备足够长度的测试表,将报错数据插入测试表中,通过 select max(length(“目标字段”)) from “测试表”,获得插入数据实际的长度信息,从而修改目标表数据或者处理包含超长字段的记录。

另外,注意中文字符的长度问题:数据库初始化参数 LENGTH_IN_CHAR=0 时,unicode 编码下一个中文占据 3 个字节(char(3));GBK 编码下一个中文占据 2 个字节(char(2));当数据库初始化参数 LENGTH_IN_CHAR=1 时,char(1) 即可存储一个字符。

Varchar类型描述

  • 执行查询时报此错误

此类问题常见于分组查询中使用了 wm_concat() 之类函数拼接字符串,由于分组数据记录过多导致拼接函数返回值超长,解决方法一般是改写 SQL 查询条件降低分组记录数或者对 SQL 语句进行修改(如改为超长切分)。

此外,clob 字段进行模糊查询时的字符串截断:Case (clob_column_name as varchar) like

  • 数据迁移时报错

一般从 Oracle 迁移到 DM 的时候,出现字符串截断的一般都是字段中含有中文,出现这种问题是因为 DM 初始化的时候选择的字符集是 Unicode(即 utf-8),该字符集的国际标准是一个汉字占 3 个字节,而 Oracle 中默认情况下一个汉字占 2 个字节,此时迁移的时候就会报。

遇到该错误有 3 种解决方法。

  1. 在初始化数据库的时候,字符集选择【gb18030】。
  2. 在初始化数据库的时候,选择【VARCHAR 类型以字符为单位】。
  3. 因为前面 2 种都需要重新初始化数据库,第三种不需要重新初始化数据库即可解决,即在选择迁移方式时,选择字符长度映射关系为 2,如下图所示:

选择迁移方式-设置字符长度

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论