关于DM的CASE_SENSITIVE; LENGTH_IN_CHAR; CHARSET的理解测试

目录

一、测试CASE_SENSITIVE

二、测试LENGTH_IN_CHAR、CHARSET


一、测试CASE_SENSITIVE

名称:CASE_SENSITIVE

功能:标识符大小写敏感,默认值为 Y

参数说明:

1)、在数据库初始化dminit时,即:CASE_SENSITIVE=Y/N时设定(一旦确定无法修改),其默认值为Y(敏感)。

2)、当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。

涉及3种测试案例:

测试SQL的代码如下:

select '大小写是否敏感',decode(sf_get_case_sensitive_flag,'0','不敏感','1','敏感');

drop table ABc;

create table ABc(id int, NamE VarChar2(10));

drop table "xYZ";

create table "xYZ" (id int, NamE VarChar2(10));--当敏感时,创建后的表为双引号内的值


--对象名与字段名:

select * from dba_objects where object_name like 'AB%';

select * from dba_objects where object_name like 'xYZ%';

--字符串值

insert into aBC values(1, 'Bei jing');

insert into aBC values(2, 'SiChuang');

insert into "aBc" values(3, 'yun Nan');

commit;

select * from Abc;

  1. CASE_SENSITIVE=Y(敏感)

可发现在配置大小写敏感的情况下,表名、列名全部被转化成大写存储。若要保持大小写不变存储,则需要给字段加" ",保持大小写存储。

2.CASE_SENSITIVE=N(不敏感)

可看到表名、字段名均未被转换为大小写。

二、测试LENGTH_IN_CHAR、CHARSET

1、名称:LENGTH_IN_CHAR

功能:VARCHAR 类型对象的长度是否以字符,默认值为 0为单位。

参数说明:

1)、在数据库初始化dminit时,即:LENGTH_IN_CHAR =0/1时设定(一旦确定无法修改), 其默认值为0。

2)、1:是,设置为以字符为单位时,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;0:否,所有 VARCHAR 类型对象的长度以字节为单位

注意事项:这个参数只影响varchar类型,而不影响char类型。不管选择的是什么字符集CHARSET,varchar类型是否以字符为单位,varchar类型的最大精度为8188(实际最大精度还取决于页大小)

2、名称:CHARSET

功能:字符集选项,默认值为0

参数说明:

1)、在数据库初始化dminit时,即:CHARSET =0/1/2时设定(一旦确定无法修改), 其默认值为0;

2)、0 代表 GB18030, 1 代表UTF-8, 2 代表韩文字符集 EUC-KR;

当gb18030一个中文字符占用两个字节,utf-8一个中文字符占三个字节,英文一个字母占用一个字节。

分四种情况测试:

  1. CHARSET=0,LENGTH_IN_CHAR=0 (字符集是gb18030,长度以字节为单位)

select '字符集',decode(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR');

select 'varchar是否以字符为单位',decode(PARA_VALUE,0,'',1,'') from v$dm_ini where para_name='LENGTH_IN_CHAR';

--测试:CHARSET=0LENGTH_IN_CHAR=0 (字符集是gb18030,长度以字节为单位)

drop table test;

create table test(name varchar(3));

insert into test values('');

insert into test values('aaa');

insert into test values('我们');-- [NAME]长度超出定义.

insert into test values('我们的');-- [NAME]长度超出定义.

--查看表数据、数据长度和字节长度

select name,LENGTH(name),LENGTHB(name) from test;

小结:当字符集为gb18030,长度以字节为单位时,一个汉字占两个字节,一个英文字母占一个字节。

2.CHARSET=1,LENGTH_IN_CHAR=0 (字符集是utf-8,长度以字节为单位)

select '字符集',decode(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR');

select 'varchar是否以字符为单位',decode(PARA_VALUE,0,'',1,'') from v$dm_ini where para_name='LENGTH_IN_CHAR';

--测试:CHARSET=1,LENGTH_IN_CHAR=0 (字符集是utf-8,长度以字节为单位)

create table test(ca varchar(1));

insert into test values('1');

insert into test values(''); -- [NAME]长度超出定义.

--查看表数据、数据长度和字节长度

select ca,LENGTH(ca),LENGTHB(ca) from test;

--

drop table test;

create table test(ca varchar(3));

insert into test values('aaa');

insert into test values('');

insert into test values('我们'); -- [NAME]长度超出定义.

小结:当字符集为utf-8,长度以字节为单位时,一个汉字占三个字节,一个英文字母占一个字节。

3、CHARSET=0,LENGTH_IN_CHAR=1(字符集是gb18030,长度以字符为单位)

select '字符集',decode(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR');

select 'varchar是否以字符为单位',decode(PARA_VALUE,0,'',1,'') from v$dm_ini where para_name='LENGTH_IN_CHAR';

--测试:CHARSET=0LENGTH_IN_CHAR=1(字符集是gb18030,长度以字符为单位)

create table test(name varchar(3));

insert into test values('');

insert into test values('我们');

insert into test values('我们的');

insert into test values('我们的家');-- [NAME]长度超出定义.

insert into test values('aaa');

insert into test values('aaaab');

insert into test values('aaaabb');

insert into test values('aaaabbb');-- [NAME]长度超出定义.

--查看表数据、数据长度和字节长度

select name,LENGTH(name),LENGTHB(name) from test;

小结:当字符集为gb18030,长度以字符为单位时,一个汉字占两个字节一个字符,一个英文字母占一个字节,一个字符可以存一个汉字或者两个英文字母。

4、CHARSET=1,LENGTH_IN_CHAR=1(字符集是utf-8,长度以字符为单位)

select '字符集',decode(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR');

select 'varchar是否以字符为单位',decode(PARA_VALUE,0,'',1,'') from v$dm_ini where para_name='LENGTH_IN_CHAR';

--测试:CHARSET=1,LENGTH_IN_CHAR=1(字符集是utf-8,长度以字符为单位)

-- [dmdba@dm11 ~]$ dminit path=/dm/data/t CHARSET=1 LENGTH_IN_CHAR=1 port_num=5324

create table test(ca varchar(1));

insert into test values('a');

insert into test values('aaa');

insert into test values('aaaa');

insert into test values('aaaaa'); -- [NAME]长度超出定义.

insert into test values('');

insert into test values('我们'); -- [NAME]长度超出定义.

--查看表数据、数据长度和字节长度

select ca,LENGTH(ca),LENGTHB(ca) from test;

小结:当字符集为utf-8,长度以字符为单位时,一个汉字占三个字节,一个英文字母占一个字节,一个字符四个字节(即一个varchar单位占四个字节),可以存四个英文字母。

 更多学习内容参考:达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值