- 执行 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)
即可存储一个字符。
- 执行查询时报此错误
此类问题常见于分组查询中使用了 wm_concat()
之类函数拼接字符串,由于分组数据记录过多导致拼接函数返回值超长,解决方法一般是改写 SQL 查询条件降低分组记录数或者对 SQL 语句进行修改(如改为超长切分)。
此外,clob 字段进行模糊查询时的字符串截断:Case (clob_column_name as varchar) like
。
- 数据迁移时报错
一般从 Oracle 迁移到 DM 的时候,出现字符串截断的一般都是字段中含有中文,出现这种问题是因为 DM 初始化的时候选择的字符集是 Unicode(即 utf-8)
,该字符集的国际标准是一个汉字占 3 个字节,而 Oracle 中默认情况下一个汉字占 2 个字节,此时迁移的时候就会报。
遇到该错误有 3 种解决方法。
- 在初始化数据库的时候,字符集选择【gb18030】。
- 在初始化数据库的时候,选择【VARCHAR 类型以字符为单位】。
- 因为前面 2 种都需要重新初始化数据库,第三种不需要重新初始化数据库即可解决,即在选择迁移方式时,选择字符长度映射关系为 2,如下图所示:
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。