mysql的varchar和oracle的varchar2比較


首先說結論:

1.mysql存儲的是字符數(不分語言)

2.oracle存儲的需要看定義,如果定義為varchar2(n),則默認是n個字節,如果是varchar2(n char)則是n個字節.

3.oracle的實際存儲有受到限制,如果是12c之前,那么即使可以定義varchar2(4000 char)也無法存入4000個漢字。

以上結論是基於以下情形:

1.mysql-8.x 字符集utf8mb4

2.oracle-12.2.0 ,字符集合al32utf8(三個字節存儲一個漢字)

--

oracle12c即使定義為varchar2(4000 char),如果字符集是al32utf8,那么實際只能存入4000/3≈1333個漢字。

create table t_test_datalength(id int ,name varchar2(3 char));
alter table t_test_datalength add v4000 varchar2(4000 char);
declare
  vn_char varchar2(4000 char) := '';
  i       int;
  ttl     int;
begin
  for i in 1 .. 400 loop
    vn_char := vn_char || '我們大家都很好啊匹配';
  end loop;
  dbms_output.put_line(vn_char);
  ttl := length(vn_char);
  dbms_output.put_line(ttl);
  update t_test_datalength set v4000 = vn_char;
end;
 

執行后,會提示ora-12899


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM