【YashanDB知識庫】透過觸發器複製varchar(4000 char)列的資料導致亂碼

YashanDB發表於2024-12-25

本文內容來自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;

相關文章