首先说结论:
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