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