注册
达梦数据库CASE_SENSITIVE参数的理解
专栏/培训园地/ 文章详情 /

达梦数据库CASE_SENSITIVE参数的理解

return; 2024/09/23 538 0 0
摘要

概述:

CASE_SENSITIVE参数的作用是标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大 小写。取值范围:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。可选参数。
此参数在数据库创建成功后无法修改,可通过系统函数SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数置。

一、安装数据库

在linux系统中使用dmdba用户安装DM8数据库,安装完成后使用root用户注册DMAP服务
image.png

二、初始化数据库

使用dminit工具初始化数据库,dminit使用较为灵活,参数较多。用户可用“dminit HELP”快速查看 dminit 版本信息和各参数信息。

[dmdba@localhost bin]$ ./dminit HELP
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2024-04-17
version: 03134284044-20230417-187846-20040
格式: ./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,范围为:256M ~ 8G
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],3[ZB]
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 页检查模式(1),可选值:0/1/2
PAGE_HASH_NAME 设置页检查HASH算法
EXTERNAL_CIPHER_NAME 设置默认加密算法
EXTERNAL_HASH_NAME 设置默认HASH算法
EXTERNAL_CRYPTO_NAME 设置根密钥加密引擎
RLOG_ENCRYPT_NAME 设置日志文件加密算法,若未设置,则不加密
RLOG_POSTFIX_NAME 设置日志文件后缀名,长度不超过10。默认为log,例如DAMENG01.log
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 分布式环境下协同工作的监听端口
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日志(1) 1:是 0:否
PSEG_MGR_FLAG 是否仅使用管理段记录事务信息(0) 1:是 0:否
CHAR_FIX_STORAGE CHAR是否按定长存储(N),可选值:Y/N,1/0
SQL_LOG_FORBID 是否禁止打开SQL日志(N),可选值:Y/N,1/0
DPC_MODE 指定DPC集群中的实例角色(0) 0:无 1:MP 2:BP 3:SP,取值1/2/3时也可以用MP/BP/SP代替

初始化实例的示例如下:设置页大小(PAGE_SIZE)为 32,日志大小(LOG_SIZE)为 2048,大小写(CASE_SENSITIVE)为敏感,字符集(CHARSET)为 GB18030。
./dminit PATH=/home/dm8/data PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=0 CASE_SENSITIVE=Y
image.png

三、创建实例服务

创建实例服务命令如下:
./dm_service_installer.sh -t dmserver -p DMSERVER -dm_ini /home/dm8/data/DAMENG/dm.ini
image.png

四、启动实例服务

./DmServiceDMSERVER start
image.png

五、使用DM管理工具连接数据库

可以通过以下方式查看大小写是否敏感
SELECT CASE_SENSITIVE();
image.png

六、测试大小写敏感

1.大小写敏感

CREATE TABLE Abc(COL INT);
------对于创建表,在大小写敏感的情况下,表名Abc不加双引号,系统会自动转换成大写表名ABC

image.png

对比执行情况:
image.pngimage.pngimage.pngimage.png

SELECT * FROM Abc; ------执行成功 SELECT * FROM ABC; ------执行成功 SELECT * FROM "Abc"; ------error:无效的表或视图名[Abc] SELECT * FROM "ABC"; ------执行成功

CREATE TABLE "Abc"(COL INT);
------对于创建表,在大小写敏感的情况下,表名Abc加双引号,即创建的表为Abc

image.png

在执行以下操作前须保证前面创建的ABC表不存在 SELECT * FROM Abc; ------error:无效的表或视图名[ABC] SELECT * FROM ABC; ------error:无效的表或视图名[ABC] SELECT * FROM "Abc"; ------执行成功 SELECT * FROM "ABC"; ------error:无效的表或视图名[ABC]

执行情况如下:
image.pngimage.pngimage.pngimage.png

注意:
在大小写敏感的情况下,如果表使用的是小写,系统会自动加上双引号
在查询的时候必须使用双引号来访问

2.大小写不敏感

CREATE TABLE a(C1 INT);
------对于创建表,在大小写不敏感的情况下,表名a是否加双引号,对查询结果没有影响

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

3.字符串内容

CREATE TABLE TTT(COL VARCHAR(100)); ---创建表TTT
INSERT INTO TTT VALUES('Abc'); ---插入数据Abc
INSERT INTO TTT VALUES('ABC'); ---插入数据ABC

大小写敏感

SELECT COUNT(*) FROM TTT WHERE COL='Abc'; ------结果为1 SELECT COUNT(*) FROM TTT WHERE COL='ABC'; ------结果为1

大小写不敏感

SELECT COUNT(*) FROM TTT WHERE COL='Abc'; ------结果为2 SELECT COUNT(*) FROM TTT WHERE COL='ABC'; ------结果为2

七、总结

1.大小写敏感的数据库

1.创建表:若表名或列名未添加双引号“”,则表名和列名会自动转换为大写形式
<1>若对表名或列名添加双引号“”,则会固定书写时的大、小写
<2>同名的数据库对象,如果大小写不同,那么则为两个不同的对象。
2.字段:若表名或列名未添加双引号“”,则表名和列名会自动转换为大写形式
3.DML 或 DDL 操作时:
<1>如果不对表名或列名添加双引号“”,那么表名和列名都自动转换为大写形式;
<2>对表进行 DML 操作时,如果没有小写形式的字段,不能采取小写加""的形式指定过滤字段,会被认定为无效的字段;
<3>如果对表名或列名添加‘“”,会固定书写时的大、小写形式,“”中是大写形式,则过滤字段就是大写字段,“”中是小写字段,则过滤字段就是小写字段;
<4>对其进行 DML 操作时,需要利用“”指定表名和字段名,否则默认会认定以大写形式去查询对象;
<5>查询时,‘’和“”界定符中字符串区分大小写,界定符中的字符串若是大写形式,那仅查询这个大写形式的对象,若是或小写形式,那仅查询这个小写形式的对象,DML 操作依旧。

2.大小写不敏感的数据库

1.创建表:无论对不对表名或列名添加双引号“”,表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式;
2.字段:无论对不对表名或列名添加双引号“”,表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式;
不允许相同的字段名,即使大小写不同;
查询时,''和""界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集。
3.DML 或 DDL 操作时:
<1>无论对不对表名或列名添加"",表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式;
<2>一个表中,不允许相同的字段名,即使大小写不同;
<3>查询时,''和""界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集,进行 DML 操作时依旧

在大小写不敏感的情况下,以上情况均不允许存在同名的数据库对象,即使大小写不同,默认也只能存在一个。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服