问题描述
某用户在通过触发器将表 A 中 varchar(4000 char) 字段的数据复制到表 B 时,发现表 B 中对应字段的内容变成了乱码,与原始数据不一致。
风险与影响
数据完整性受到破坏,可能导致业务系统中的逻辑判断失效或数据异常。
影响范围
该问题存在于所有 YashanDB 版本中。
原因分析
YashanDB 在处理触发器逻辑时,对于 varchar(4000 char) 类型字段的数据复制存在内部处理缺陷,导致编码异常,从而产生乱码。
解决与规避方式
建议将字段长度缩小至 varchar(2000 char) 或更小,以避免触发该问题。此为目前有效的规避手段。
复现测试示例
可以用以下 SQL 代码重现该问题:
drop trigger trigger1;
drop table A;
drop table B;
create table A(tid number primary key not null, c1 varchar(4000 char));
create table B(tid number primary key not null, c2 varchar(4000 char));
create or replace trigger trigger1
after insert on A
for each row
begin
insert into B values(:new.tid, :new.c1);
end;
/
insert into A values(1, 'abcd');
commit;
select * from B;
观察 B 表中对应记录是否正常即可判断是否存在乱码问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。