【达梦8】大小敏感字符集参数设置

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

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值