ITPub博客

首页 > 数据库 > 国内数据库 > DM8 字符串大小写敏感

DM8 字符串大小写敏感

原创 国内数据库 作者:LEVEL7 时间:2021-06-09 13:42:11 0 删除 编辑

1.     大小写敏感参数是什么?

大小写敏感参数是达梦数据库初始化时的一个全局参数,默认是敏感的,并且设定后不可更改。

dminit help

initdb V8

db version: 0x7000c

License will expire on 2022-03-25

格式: ./dminit     KEYWORD=value

 

例程: ./dminit     PATH=/public/dmdb/dmData PAGE_SIZE=16

 

关键字                     说明(默认值)

--------------------------------------------------------------------------------

INI_FILE                    初始化文件dm.ini存放的路径

PATH                        初始数据库存放的路径

CTL_PATH                    控制文件路径

LOG_PATH                    日志文件路径

EXTENT_SIZE                 数据文件使用的簇大小(16),可选值:16, 32, 64,单位:页

PAGE_SIZE                   数据页大小(8),可选值:4, 8, 16, 32,单位:K

LOG_SIZE                    日志文件大小(256),单位为:M,范围为:64M ~ 2G

CASE_SENSITIVE              大小敏感(Y),可选值:Y/N,1/0

CHARSET/UNICODE_FLAG        字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]

SEC_PRIV_MODE               权限管理模式(0),可选值:0[TRADITION],1[BMJ],2[EVAL]

LENGTH_IN_CHAR             VARCHAR 类型长度是否以字符为单位(N),可选值:Y/N,1/0

SYSDBA_PWD                  设置SYSDBA密码(SYSDBA)

SYSAUDITOR_PWD              设置SYSAUDITOR密码(SYSAUDITOR)

DB_NAME                     数据库名(DAMENG)

INSTANCE_NAME               实例名(DMSERVER)

PORT_NUM                    监听端口号(5236)

BUFFER                      系统缓存大小(100),单位M

TIME_ZONE                   设置时区(+08:00)

PAGE_CHECK                  页检查模式(0),可选值:0/1/2

EXTERNAL_CIPHER_NAME        设置默认加密算法

EXTERNAL_HASH_NAME          设置默认HASH算法

EXTERNAL_CRYPTO_NAME        设置根密钥加密引擎

RLOG_ENC_FLAG               设置日志文件是否加密(N),可选值:Y/N,1/0

USBKEY_PIN                  设置USBKEY PIN

PAGE_ENC_SLICE_SIZE         设置页加密分片大小,可选值:0、512、4096,单位:Byte

ENCRYPT_NAME                设置全库加密算法

BLANK_PAD_MODE              设置空格填充模式(0),可选值:0/1

SYSTEM_MIRROR_PATH         SYSTEM 数据文件镜像路径

MAIN_MIRROR_PATH           MAIN 数据文件镜像

ROLL_MIRROR_PATH            回滚文件镜像路径

MAL_FLAG                    初始化时设置dm.ini中的MAL_INI(0)

ARCH_FLAG                   初始化时设置dm.ini中的ARCH_INI(0)

MPP_FLAG                   Mpp 系统内的库初始化时设置dm.ini中的mpp_ini(0)

CONTROL                     初始化配置文件(配置文件格式见系统管理员手册)

AUTO_OVERWRITE              是否覆盖所有同名文件(0) 0:不覆盖 1:部分覆盖 2:完全覆盖

USE_NEW_HASH                是否使用改进的字符类型HASH算法(1)

ELOG_PATH                   指定初始化过程中生成的日志文件所在路径

AP_PORT_NUM                ECS 模式下AP协同工作的监听端口

DFS_FLAG                    初始化时设置dm.ini中的DFS_INI(0)

DFS_PATH                    启用dfs时指定数据文件的缺省路径

DFS_HOST                    指定连接分布式系统DFS的服务地址(localhost)

DFS_PORT                    指定连接分布式系统DFS的服务端口号(3332)

DFS_COPY_NUM                指定分布式系统的副本数(3)

DFS_DB_NAME                 指定分布式系统的中数据库名(默认与DB_NAME一致)

SHARE_FLAG                  指定分布式系统中该数据库的共享属性(0)

REGION_MODE                 指定分布式系统中该数据库的系统表空间数据文件的区块策略(0) 0:微区策略 1:宏区策略

HUGE_WITH_DELTA             是否仅支持创建事务型HUGE表(1) 1:是 0:否

RLOG_GEN_FOR_HUGE           是否生成HUGE表REDO日志(0) 1:是 0:否

PSEG_MGR_FLAG               是否仅使用管理段记录事务信息(0) 1:是 0:否

CHAR_FIX_STORAGE           CHAR 是否按定长存储(N),可选值:Y/N,1/0

HELP                        打印帮助信息

查询大小写敏感设置的情况:

SELECT CASE_SENSITIVE(); -- 结果为 1 是大小写敏感,结果为 0 是不敏感

2.     大小写敏感针对的是对象名还是表中数据?

首先看看对表中内容作比较时大小写敏感的影响。

CREATE TABLE  TEST_CASE_SENSITIVE(C1 VARCHAR(100));

INSERT INTO TEST_CASE_SENSITIVE VALUES('a');

INSERT INTO TEST_CASE_SENSITIVE VALUES('A');

COMMIT;

-- 大小写敏感的情况

SELECT COUNT(*) FROM TEST_CASE_SENSITIVE WHERE C1='a'; -- 结果为1

SELECT COUNT(*) FROM TEST_CASE_SENSITIVE WHERE C1='A'; -- 结果为1

-- 大小写不敏感的情况

SELECT COUNT(*) FROM TEST_CASE_SENSITIVE WHERE C1='a'; -- 结果为2

SELECT COUNT(*) FROM TEST_CASE_SENSITIVE WHERE C1='A'; -- 结果为2

再来看看大小写敏感参数对对象名的影响。

-- 在大小写敏感的情况下,创建对象时不要对对象名加双引号,大小写对对象名没有影响

CREATE TABLE a(C1 INT);

SELECT * FROM a;    -- 执行成功

SELECT * FROM A;    -- 执行成功

SELECT * FROM "A";  -- 执行成功

SELECT * FROM "a";  -- 执行失败:无效的表或视图名[A]

CREATE TABLE "b"(C1 INT);

SELECT * FROM b;    -- 执行失败:无效的表或视图名[B]

SELECT * FROM B;    -- 执行失败:无效的表或视图名[B]

SELECT * FROM "b";  -- 执行成功

SELECT * FROM "B";  -- 执行失败:无效的表或视图名[B]

-- 注意:在达梦管理工具中使用图形界面创建对象时如果用小写就会自动加上双引号,查询的时候必须使用双引号来访问,很多朋友问题注意出在这里,如果在大小写敏感的库里面使用图形界面而不是 SQL 语句来创建对象,一定注意要用大写,用小写就会自动加双引号,强制保持大小写了

-- 在大小写不敏感的情况下,加不加双引号都无所谓,对查询没有影响

CREATE TABLE a(C1 INT);

SELECT * FROM a;    -- 执行成功

SELECT * FROM A;    -- 执行成功

SELECT * FROM "a";  -- 执行成功

SELECT * FROM "A";  -- 执行成功

CREATE TABLE "b"(C1 INT);

SELECT * FROM b;    -- 执行成功

SELECT * FROM B;    -- 执行成功

SELECT * FROM "b";  -- 执行成功

SELECT * FROM "B";  -- 执行成功

OTHERS  操作,大小写敏感参数对列名的影响。

-- 在大小写敏感的情况下

create table test1(id int,name char(20));

-- 进行 DML 操作

insert into sysdba.test1 values(1,'an');

update sysdba.test1 set id=100 where id=1;

delete from sysdba.test1 where id=100;

commit;

--4  条语句执行成功

insert into sysdba.test1("id","name") values(1,'an');-- 无效的列名[id]

update sysdba.test1 set id=100 where "id"=1;-- 无效的列名[id]

delete from sysdba.test1 where "id"=100;-- 无效的列名[id]

-- 在大小写不敏感的情况下

create table test1(id int,name char(20));

- 进行 DML 操作

insert into sysdba.test1 values(1,'an');

update sysdba.test1 set id=100 where id=1;

delete from sysdba.test1 where id=100;

commit;

--4  条语句执行成功

insert into sysdba.test1("id","name") values(1,'an');-- 执行成功

update sysdba.test1 set id=100 where ID=1;-- 执行成功

select * from TEST1 where NAME='AN';-- 执行成功

delete from sysdba.test1 where NAME='AN';-- 执行成功

select * from TEST1;-- 执行成功

create table test2("id" int,id int);-- 执行失败,列[id]已存在

3.     总结

1)     大小写敏感的数据库中,创建表时:

Ø    如果不对表名或列名添加"",那么表名和列名都自动转换为大写形式

Ø    如果对表名或列名添加"",会固定书写时的大、小写形式,书写时采取的是小写形式,那么就定型为小写形式,其他不添加""的则自动转换为大写形式,无论书写时采取的是大写形式或小写形式

Ø    同名的数据库对象,如果大小写不同,那么则为两个不同的对象,字段同样如此

Ø    一个表中,即使是相同的字段名,只要大小写不同,允许存在同名且不同大小写形式的字段

2)     大小写敏感的数据库中,DML 或 DDL 操作时:

Ø    如果不对表名或列名添加"",那么表名和列名都自动转换为大写形式

Ø    对表进行 DML 操作时,如果没有小写形式的字段,不能采取小写加""的形式指定过滤字段,会被认定为无效的字段

Ø    如果对表名或列名添加"",会固定书写时的大、小写形式,""中是大写形式,则过滤字段就是大写字段,""中是小写字段,则过滤字段就是小写字段

Ø    对其进行 DML 操作时,需要利用""指定表名和字段名,否则默认会认定以大写形式去查询对象

Ø    查询时,''和""界定符中字符串区分大小写,界定符中的字符串若是大写形式,那仅查询这个大写形式的对象,若是或小写形式,那仅查询这个小写形式的对象,DML 操作依旧

3)     大小写不敏感的数据库中,创建表时:

Ø    无论对不对表名或列名添加"",表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式

Ø    不允许存在同名的数据库对象,即使大小写不同,默认也只能存在一个

Ø    一个表中,也不允许相同的字段名,即使大小写不同

Ø    查询时,''和""界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集

4)     大小写不敏感的数据库中,DML 或 DDL 操作时:

Ø    无论对不对表名或列名添加"",表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式

Ø    不允许存在同名的数据库对象,即使大小写不同,默认也只能存在一个

Ø    一个表中,也不允许相同的字段名,即使大小写不同

Ø    查询时,''和""界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集,进行 DML 操作时依旧


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31516603/viewspace-2776124/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle/DM DBA

注册时间:2018-01-10

  • 博文量
    20
  • 访问量
    11500