首先說結論:
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