ITPub博客

首页 > 数据库 > 国内数据库 > DM数据库字符集和varchar是否以字节为单位的影响

DM数据库字符集和varchar是否以字节为单位的影响

原创 国内数据库 作者:damaibaobao 时间:2021-05-21 14:13:04 0 删除 编辑

概要

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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2021-05-19

  • 博文量
    3
  • 访问量
    4773