1. 参数含义
标识符大小写敏感,默认值为 Y。
- 当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;
- 当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。
CASE_SENSITIVE大小敏感(Y),可选值:Y/N,1/0。该参数属于初始化参数,在创建实例时候定下来的,在参数配置文件dm.ini里没有记录。
大小写敏感通常涉及到2种对象:
- 对象名
- 数据
2. 环境描述
3. 创建实例
3.1. 创建大小写敏感实例lei1
[dmdba@lei3 ~]$ dminit PATH=/dmdba/data DB_NAME=lei1 instance_name=lei1 SYSDBA_PWD=Dameng123 PORT_NUM=5236 CASE_SENSITIVE=Y
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-07-03
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmdba/data/lei1/lei101.log
log file path: /dmdba/data/lei1/lei102.log
write to dir [/dmdba/data/lei1].
create dm database success. 2024-08-27 10:07:20
3.2. 创建大小写不敏感实例lei2
[dmdba@lei3 ~]$ dminit PATH=/dmdba/data DB_NAME=lei2 instance_name=lei2 SYSDBA_PWD=Dameng123 PORT_NUM=5237 CASE_SENSITIVE=N
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-07-03
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmdba/data/lei2/lei201.log
log file path: /dmdba/data/lei2/lei202.log
write to dir [/dmdba/data/lei2].
create dm database success. 2024-08-27 10:09:37
4. 测试CASE_SENSITIVE
4.1. 测试大小写敏感实例lei1
4.1.1. 测试表名
[dmdba@lei3 ~]$ disql sysdba/Dameng123@192.168.0.3:5236
服务器[192.168.0.3:5236]:处于普通打开状态
登录使用时间 : 3.958(ms)
disql V8
SQL> select name,instance_name,status$ from v$instance;
行号 NAME INSTANCE_NAME STATUS$
---------- ---- ------------- -------
1 LEI1 LEI1 OPEN
已用时间: 0.789(毫秒). 执行号:64701.
SQL> select value,sys_value from v$parameter where name='GLOBAL_STR_CASE_SENSITIVE';
行号 VALUE SYS_VALUE
---------- ----- ---------
1 1 1
已用时间: 4.583(毫秒). 执行号:64702.
SQL> SELECT CASE_SENSITIVE();
行号 CASE_SENSITIVE()
---------- ----------------
1 1
已用时间: 0.626(毫秒). 执行号:64703.
SQL> CREATE TABLE lei(name varchar(10));
操作已执行
已用时间: 2.374(毫秒). 执行号:64704.
SQL> SELECT * FROM lei;
未选定行
已用时间: 0.741(毫秒). 执行号:64705.
SQL> SELECT * FROM LEI;
未选定行
已用时间: 0.562(毫秒). 执行号:64706.
SQL> SELECT * FROM "lei";
SELECT * FROM "lei";
第1 行附近出现错误[-2106]:无效的表或视图名[lei].
已用时间: 0.414(毫秒). 执行号:0.
SQL> SELECT * FROM "LEI";
未选定行
已用时间: 0.575(毫秒). 执行号:64707.
4.1.2. 测试表数据
SQL> insert into lei values('a');
影响行数 1
已用时间: 0.817(毫秒). 执行号:64710.
SQL> commit;
操作已执行
已用时间: 0.725(毫秒). 执行号:64711.
SQL> insert into lei values('A');
影响行数 1
已用时间: 0.500(毫秒). 执行号:64712.
SQL> commit;
操作已执行
已用时间: 0.795(毫秒). 执行号:64713.
SQL> SELECT COUNT(*) FROM lei WHERE name='a';
行号 COUNT(*)
---------- --------------------
1 1
已用时间: 0.874(毫秒). 执行号:64714.
SQL> SELECT COUNT(*) FROM lei WHERE name='A';
行号 COUNT(*)
---------- --------------------
1 1
已用时间: 0.724(毫秒). 执行号:64715.
SQL> select * from lei;
行号 NAME
---------- ----
1 a
2 A
已用时间: 0.681(毫秒). 执行号:64716.
4.2. 测试大小写不敏感实例lei2
4.2.1. 测试表名
[dmdba@lei3 ~]$ disql sysdba/Dameng123@192.168.0.3:5237
服务器[192.168.0.3:5237]:处于普通打开状态
登录使用时间 : 4.253(ms)
disql V8
SQL> select name,instance_name,status$ from v$instance;
行号 name instance_name status$
---------- ---- ------------- -------
1 LEI2 LEI2 OPEN
已用时间: 0.740(毫秒). 执行号:64701.
SQL> select value,sys_value from v$parameter where name='GLOBAL_STR_CASE_SENSITIVE';
行号 VALUE sys_value
---------- ----- ---------
1 0 0
已用时间: 4.941(毫秒). 执行号:64702.
SQL> SELECT CASE_SENSITIVE();
行号 CASE_SENSITIVE()
---------- ----------------
1 0
已用时间: 0.658(毫秒). 执行号:64703.
SQL> CREATE TABLE lei(name varchar(10));
操作已执行
已用时间: 2.445(毫秒). 执行号:64704.
SQL> SELECT * FROM lei;
未选定行
已用时间: 0.775(毫秒). 执行号:64705.
SQL> SELECT * FROM LEI;
未选定行
已用时间: 0.650(毫秒). 执行号:64707.
SQL> SELECT * FROM "lei";
未选定行
已用时间: 0.556(毫秒). 执行号:64708.
SQL> SELECT * FROM "LEI";
未选定行
已用时间: 0.266(毫秒). 执行号:64709.
4.2.2. 测试表数据
SQL> insert into lei values('a');
影响行数 1
已用时间: 0.699(毫秒). 执行号:64710.
SQL> insert into lei values('A');
影响行数 1
已用时间: 0.476(毫秒). 执行号:64711.
SQL> commit;
操作已执行
已用时间: 0.687(毫秒). 执行号:64712.
SQL> SELECT COUNT(*) FROM lei WHERE name='a';
行号 COUNT(*)
---------- --------------------
1 2
已用时间: 0.846(毫秒). 执行号:64713.
SQL> SELECT COUNT(*) FROM lei WHERE name='A';
行号 COUNT(*)
---------- --------------------
1 2
已用时间: 0.869(毫秒). 执行号:64714.
SQL> select * from lei;
行号 name
---------- ----
1 a
2 A
已用时间: 0.661(毫秒). 执行号:64715.
5. 测试总结
1.DM数据库在默认情况下是大小写敏感的;
2.大小写不敏感的情况下,对表名称加不加双引号都可以,对查询没有影响;
3.大小写敏感的情况下,创建表名称不建议加上双引号,因为实际存储在字典中已全部转大写了,但是如果表名称里存在小写则必须加上双引号;
4.在大小写敏感情况下,是严格区分大小写的,在插入存在字母大小写的数据后,查询结果不受影响;
5.在大小写不敏感情况下,是不区分大小写的,在插入存在字母大小写的数据后查询结果会受到影响。
建议使用达梦数据库时候一定要选大小写敏感。
更多内容请参考:https://eco.dameng.com