目录
一、测试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;
- 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一个中文字符占三个字节,英文一个字母占用一个字节。
分四种情况测试:
- 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=0,LENGTH_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=0,LENGTH_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单位占四个字节),可以存四个英文字母。
更多学习内容参考:达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心