CASE_SENSITIVE 参数设置
标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换 为大写;当大小写不敏感时,系统不会转换标识符的大小写,系统比较函数会将大写字母全 部转为小写字母再进行比较。
1、CASE_SENSITIVE = N(大小写不敏感)
1)初始化 CASE_SENSITIVE = N 的实例
—初始化大小写不敏感的实例
dminit PATH=/dmdata DB_NAME=NNN INSTANCE_NAME=NNN SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=N CHARSET=1 PORT_NUM=5236
—确认CASE_SENSITIVE
SQL> select CASE_SENSITIVE();
2)表名大小写测试
—建表测试
(1) create table sysdba.test0514 ( id int, name varchar2(10));
(2) create table sysdba.TEST0514( ID int, name varchar2(10));
(3) create table sysdba.“TEST0514”( ID int, name varchar2(10));
—测试总结
通过三个DDL建表语句可以看到,在大小写不敏感的实例中,无论表名是大写或是小写,亦或是通过双引号括起来,都是不允许存在表名相同的表同时存在的
3)列名大小写测试
(1) create table sysdba.test02 ( ID int, id int);
(2) create table sysdba.test01 ( id int, id1 int);
(3) create table sysdba.test03 ( id int, ID1 int);
测试总结:
通过三个DDL建表语句可以看到,在大小写不敏感的实例中,列名的规则同表名一样,无论建表语句中列名的大小写,都是不允许相同的列名存在的。
4)DML大小写测试
—insert 语句
create table sysdba.test00 ( id int, name varchar(10));
insert into sysdba.test00 (id,name) values(1,‘abc’);
insert into sysdba.test00 (id,name) values(2,‘ABC’);
insert into sysdba.test00 (id,name) values(3,‘aBc’);
—查询结果
测试总结:
通过插入三条不同的数据,无论查询条件是否存在大小写,只要存在符合的相同结果都会被检索出来
2、CASE_SENSITIVE = Y (大小写敏感)
1)初始化 CASE_SENSITIVE = Y 的实例
—初始化大小写敏感的实例
dminit PATH=/dmdata DB_NAME=YYY INSTANCE_NAME=YYY SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=1 PORT_NUM=6236
—确认当前参数
SQL> select CASE_SENSITIVE();
2)表名大小写测试
—建表测试
(1)create table sysdba.test01( ID int, name varchar2(10));
(2)create table sysdba.TEST01( ID int, name varchar2(10));
(3)create table sysdba.“test01”( ID int, name varchar2(10));
测试总结:
通过以上几条建表语句的测试,在大小写敏感的环境中,若建表语句中表名并没用双引号括起来,则都会被转换成大写。若表名已经被双引号括起来,则表名保留双引号中的大小写形式。
3)列名大小写测试
—建表测试
(1) create table sysdba.TEST02( ID int, id int);
(2) create table sysdba.TEST03( id int, “id” int);
测试总结:
在大小写敏感的环境中,同表名创建的规则一样。若建表语句中列名并没用双引号括起来,则都会被转换成大写。若列名已经被双引号括起来,则表名保留双引号中的大小写形式,且允许存在列名相同但大小写不同的列。
4)DML大小写测试
—insert 语句
create table sysdba.test00 ( id int, name varchar(10));
insert into sysdba.test00 (id,name) values(1,‘abc’);
insert into sysdba.test00 (id,name) values(2,‘ABC’);
insert into sysdba.test00 (id,name) values(3,‘aBc’);
—查询结果
测试总结:
通过插入三条不同的数据,根据不同的查询条件,产生不同的查询结果来看。在大小写敏感的环境中,查询条件严格按照结果的大小写来查询数据,若结果相同但大写不同,则不会出现在查询结果中。
LENGTH_IN_CHAR 与 CHARSET参数设置
1、LENGTH_IN_CHAR=0 CHARSET=0
1)初始化实例
—初始化实例
dminit PATH=/dmdata DB_NAME=DM INSTANCE_NAME=DM SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=0 PORT_NUM=5236
2)创建测试表与测试数据
—创建测试表与数据
create table sysdba.test01( ID int, name varchar2(5));
insert into sysdba.test01 (id,name) VALUES (1,‘aa’);
insert into sysdba.test01 (id,name) VALUES (1,‘哈’);
3)测试结果总结
LENGTH_IN_CHAR = 0 CHARSET=0的情况下,一个中文字符大概相当于2个字节。且该情况下,varchaer 字符串实际上并没有扩展。
2、LENGTH_IN_CHAR=0 CHARSET=1
1)初始化实例
—初始化实例
dminit PATH=/dmdata DB_NAME=DM INSTANCE_NAME=DM SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=1 PORT_NUM=5236
2)创建测试表与测试数据
—创建测试表与数据
create table sysdba.test01( ID int, name varchar2(5));
insert into sysdba.test01 (id,name) VALUES (1,‘aa’);
insert into sysdba.test01 (id,name) VALUES (1,‘哈’);
3)测试结果总结
LENGTH_IN_CHAR = 0 CHARSET=1的情况下,一个中文字符大概相当于3个字节。且该情况下,varchaer 字符串没有扩展。
3、LENGTH_IN_CHAR=1 CHARSET=0
1)初始化实例
—初始化实例
dminit PATH=/dmdata DB_NAME=DM INSTANCE_NAME=DM SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=1 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=0 PORT_NUM=5236
2)创建测试表与测试数据
—创建测试表与数据
create table sysdba.test01( ID int, name varchar2(5));
insert into sysdba.test01 (id,name) VALUES (1,‘aa’);
insert into sysdba.test01 (id,name) VALUES (1,‘哈’);
3)测试结果总结
LENGTH_IN_CHAR = 1 CHARSET=0的情况下,varchar字段的实际长度发生了扩展,大概是实际建表语句的2倍
4、LENGTH_IN_CHAR=1 CHARSET=1
1)初始化实例
—初始化实例
dminit PATH=/dmdata DB_NAME=DM INSTANCE_NAME=DM SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=1 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=1 PORT_NUM=5236
2)创建测试表与测试数据
—创建测试表与数据
create table sysdba.test01( ID int, name varchar2(5));
insert into sysdba.test01 (id,name) VALUES (1,‘aa’);
insert into sysdba.test01 (id,name) VALUES (1,‘哈’);
3)测试结果总结
LENGTH_IN_CHAR = 1 CHARSET=1的情况下,varchar字段的实际长度同样发生了扩展,当时相比于另外一个组合,该情况下varchar字段的扩展是实际建表语句的四倍。
PAGE_SIZE 和 EXTENT_SIZE 参数设置
PAGE_SIZE 数据文件使用的页大小。取值范围 4、8、16、32,单位:KB。选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。
EXTENT_SIZE数据文件使用的簇大小,即每次分配新的段空间时连续的页数。
同时两个参数都是属于初始化参数,数据库实例创建成功后无法进行修改。
1、初始化页大小为8k 的实例
1)初始化页大小为8k 的实例
—初始化
dminit PATH=/dmdata DB_NAME=DM INSTANCE_NAME=DM SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=8 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=0 PORT_NUM=5236
2)8k页大小测试
—新建测试表
create table sysdba.test01( ID int, name varchar2(8000));
—插入测试数据(模拟了一个大概5000字节的varchar)
—进行 insert 操作
2、初始化页大小为32k 的实例
1)初始化页大小为32k 的实例
—初始化
dminit PATH=/dmdata DB_NAME=DM INSTANCE_NAME=DM SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=32 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=Y CHARSET=0 PORT_NUM=5236
2)32k页大小测试
—新建测试表
create table sysdba.test01( ID int, name varchar2(8000));
—插入测试数据(模拟了一个大概5000字节的varchar)
—进行 insert 操作
3、测试结果对比
通过查询资料,当页大小为8k时,字符串所能容纳的最大长度大概在3900个字节左右。尝试初始了一个页大小为8k的实例,varchar 设置了8000,即使varchar 设置了8000,且插入的测试数据大概5000个字节。但是结果报错,提示记录超长无法插入数据。
又尝试初始化了一个页大小为32k 的实例,其他设置,包括建表,插入的数据都一样,结果数据插入成功没有报错。通过对比,可以看到,页大小决定了一条记录中所容纳的字节上限,即使建表语句中的设置足够大,实际插入的语句依旧无法超出页大小所容纳字节的最大值,否则报错超出超长定义。
社区地址:https://eco.dameng.com