概要
DM 数据库字符和字符集的配置参数主要有两个,如下:
LENGTH_IN_CHAR :varchar类型的字段是否以字符为单位,0为默认值,表示否,varchar类型的以字节为单位;1表示是,varchar类型的以字符为单位。该参数在初始化库时指定,且后期无法修改
CHARSET / UNICODE_FLAG :字符集参数,0代表GB18030字符集,1代表UTF-8字符集,默认为0
一、 LENGTH_IN_CHAR=0,CAHRSET=0,即:使用GB18030字符集,字符以字节为单位
1、 查看当前库的字符集设置
select UNICODE ();

select * from v$parameter where name= 'LENGTH_IN_CHAR' ;
2、 使用如下DDL 创建表
create table a ( name varchar ( 10 ));
3、 插入10 个英文字符成功,插入 11 个英文字符失败
insert into a values ( 'abcdefghig' );

insert into a values ( 'ABCDEFGHIG' );

insert into a values ( 'abcdefghigk' );
4、 插入5 个中文(简体和繁体)成功,插入 6 个中文失败,插入 5 个中文 +1 个英文失败
insert into a values ( ' 测试一下啦 ' );

insert into a values ( ' 張劉網麗無 ' );

insert into a values ( ' 测试一下啦哦 ' );

insert into a values ( ' 测试一下啦 a' );

二、 LENGTH_IN_CHAR=1,CAHRSET=0,即:使用GB18030字符集,字符以字符个数为单位
1、 查看当前库字符集和字符设置
select UNICODE ();

select * from v$parameter where name= 'LENGTH_IN_CHAR' ;
2、 使用如下DDL 建表
create table a ( name varchar ( 10 ));
3、 插入20 个英文正常,插入 21 个英文失败
insert into a values ( 'abcdefghigabcdefghig' );

insert into a values ( 'ABCDEFGHIGABCDEFGHIG' );

insert into a values ( 'abcdefghigabcdefghiga' );
4、 插入10 个中文(简体和繁体)成功,插入 11 个中文失败,插入 10 个中文 +1 个英文失败
insert into a values ( ' 测试一下啦测试一下啦 ' );

insert into a values ( ' 测试一下啦测试一下啦哦 ' );

insert into a values ( ' 测试一下啦测试一下啦 a' );

insert into a values ( ' 張劉網麗無張劉網麗無 ' );

三、 LENGTH_IN_CHAR=0,CAHRSET=1,即:使用UTF-8字符集,字符以字节为单位
1、 查看当前库的字符设置
select UNICODE ();

select * from v$parameter where name= 'LENGTH_IN_CHAR' ;
2、 使用如下DDL 建表
create table a ( name varchar ( 10 ));
3、 插入10 个英文成功,插入 11 个英文失败
insert into a values ( 'abcdefghig' );

insert into a values ( 'ABCDEFGHIG' );

insert into a values ( 'abcdefghiga' );
4、 插入3 个中文成功,插入 4 个中文失败,插入 3 个中文 +1 个英文成功,插入 3 个中文 +2 个英文失败
insert into a values ( ' 测试一 ' );

insert into a values ( ' 测试一下 ' );

insert into a values ( ' 張劉網 ' );

insert into a values ( ' 测试一 a' );

insert into a values ( ' 测试一 ab' );

四、 LENGTH_IN_CHAR=1,CAHRSET=1,即:使用UTF-8字符集,字符以字符个数为单位
1、 查看当前库的字符设置
select UNICODE ();

select * from v$parameter where name= 'LENGTH_IN_CHAR' ;
2、 使用如下DDL 建表
create table a ( name varchar ( 10 ));
3、 插入40 个英文成功,插入 41 个英文失败
insert into a values ( 'abcdefghigabcdefghigabcdefghigabcdefghig' );

insert into a values ( 'ABCDEFGHIGABCDEFGHIGABCDEFGHIGABCDEFGHIG' );

insert into a values ( 'abcdefghigabcdefghigabcdefghigabcdefghiga' );
4、 插入13 个中文(简体和繁体)正常,插入 14 个中文失败,插入 13 个中文 +1 个英文正常,插入 13 个中文 +2 个英文失败
insert into a values ( ' 测试一下啦测试一下啦测试一 ' );

insert into a values ( ' 張劉網麗無張劉網麗無張劉網 ' );

insert into a values ( ' 测试一下啦测试一下啦测试一下 ' );

insert into a values ( ' 测试一下啦测试一下啦测试一 a' );

insert into a values ( ' 测试一下啦测试一下啦测试一 ab' );

测试结论:
1 、 对于GB18030 字符集:字符以字节为单位时,每个英文字母占用 1 字节, 每个中文占用2 字节;字符以字符为单位时, 每个英文字母 实际占用0.5 个 字符, 每个中文 实际占用1 个字符
2 、 对于UTF-8 字符集: 字符以字节为单位时,每个英文字母占用 1 字节, 每个中文占用3 字节; 字符以字符为单位时,每个英文字符 实际占用0. 25 个 字符, 每个中文 实际占用 0.75 个字符
3 、在默认情况下, varchar 类型以字节为单位时,两种字符集对于英文的支持是一样的,但 GB18030 对于中文会更加的友好
4 、两种字符集在存储 varchar 类型数据时,对于中文的繁简体占用大小是一样的,英文大小写占用大小是一样的
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000201/viewspace-2773284/ ,如需转载,请注明出处,否则将追究法律责任。