本文內容來自YashanDB官網,原文內容請見 https://www.yashandb.com/newsinfo/7802969.html?templateId=1718516
問題現象
某客戶在使用觸發器將varchar(4000 char)列的資料從表A複製到表B時,表B上列的資料與A上對應列的資料不同且為亂碼。
如下截圖為A的資料及使用觸發器複製到B的資料:
問題的風險及影響
資料正確性無法保證。
問題影響的版本
所有的YashanDB版本
問題發生原因
YashanDB在處理觸發器場景下的varchar(4000 char)列的資料複製時,處理機制有誤。
解決方法及規避方式
將列的長度修改為varchar(2000 char)或者更小。
問題分析和處理過程
使用如下的SQL可以驗證YashanDB是否存在此問題:
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;