对达梦数据库CASE_SENSITIVE参数的探讨
一、环境准备
安装dm8数据库软件(略)
二、初始化实例
2.1初始化实例
A机器(大小写不敏感):
./dminit PATH=/home/dataproda DB_NAME=PRODA instance_name=PRODA SYSDBA_PWD=Dameng123 PORT_NUM=5237 CASE_SENSITIVE=N
B机器(大小写敏感):
./dminit PATH=/home/dataprodb DB_NAME=PRODB instance_name=PRODB SYSDBA_PWD=Dameng123 PORT_NUM=5238 CASE_SENSITIVE=Y
2.2注册服务并启动实例
A机器:
./dm_service_installer.sh -t dmserver -p PRODA -dm_ini /home/dataproda/PRODA/dm.ini
[dmdba@localhost bin]$ ./DmServicePRODA status
DmServicePRODA is stopped
[dmdba@localhost bin]$ ./DmServicePRODA start
Starting DmServicePRODA: [ OK ]
[dmdba@localhost bin]$ ./DmServicePRODA status
DmServicePRODA (pid 11228) is running.
B机器:
./dm_service_installer.sh -t dmserver -p PRODB -dm_ini /home/dataprodb/PRODB/dm.ini
[dmdba@localhost bin]$ ./DmServicePRODB status
DmServicePRODB is stopped
[dmdba@localhost bin]$ ./DmServicePRODB start
Starting DmServicePRODB: [ OK ]
[dmdba@localhost bin]$ ./DmServicePRODB status
DmServicePRODB (pid 17193) is running.
2.3测试大小写不敏感的PRODA实例
[dmdba@localhost bin]$ ./disql sysdba/Dameng123:5237
服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 11.320(ms)
disql V8
SQL> select name,instance_name,status$ from v
i
n
s
t
a
n
c
e
;
行号
n
a
m
e
i
n
s
t
a
n
c
e
n
a
m
e
s
t
a
t
u
s
instance; 行号 name instance_name status
instance;行号nameinstancenamestatus
1 PRODA PRODA OPEN
已用时间: 0.850(毫秒). 执行号:62601.
SQL> select value,sys_value from v$parameter where name=‘GLOBAL_STR_CASE_SENSITIVE’;
行号 VALUE sys_value
1 0 0
已用时间: 5.012(毫秒). 执行号:62602.
SQL> SELECT CASE_SENSITIVE();
行号 CASE_SENSITIVE()
1 0
已用时间: 0.733(毫秒). 执行号:62603.
验证表数据
SQL> CREATE TABLE a(C1 INT);
操作已执行
已用时间: 8.605(毫秒). 执行号:62604.
SQL> SELECT * FROM a;
未选定行
已用时间: 0.765(毫秒). 执行号:62605.
SQL> SELECT * FROM A;
未选定行
已用时间: 0.730(毫秒). 执行号:62606.
SQL> SELECT * FROM “a”;
未选定行
已用时间: 0.586(毫秒). 执行号:62607.
SQL> SELECT * FROM “A”;
未选定行
已用时间: 0.574(毫秒). 执行号:62608.
SQL> CREATE TABLE tt(C1 VARCHAR(100));
操作已执行
已用时间: 4.487(毫秒). 执行号:62609.
SQL> INSERT INTO tt VALUES(‘a’);
影响行数 1
已用时间: 0.797(毫秒). 执行号:62610.
SQL> INSERT INTO tt VALUES(‘A’);
影响行数 1
已用时间: 0.679(毫秒). 执行号:62611.
SQL> COMMIT;
操作已执行
已用时间: 1.031(毫秒). 执行号:62612.
SQL> SELECT COUNT() FROM tt WHERE C1=‘A’;
行号 COUNT()
1 2
已用时间: 1.106(毫秒). 执行号:62613.
对列的影响
SQL> create table test2(id int);
操作已执行
已用时间: 3.854(毫秒). 执行号:62601.
SQL> insert into test2 values(2);
影响行数 1
已用时间: 0.579(毫秒). 执行号:62602.
SQL> select id from test2;
行号 id
1 2
已用时间: 0.573(毫秒). 执行号:62604.
SQL> select ID from test2;
行号 ID
1 2
已用时间: 0.642(毫秒). 执行号:62605.
SQL> create table test3(“id” int);
操作已执行
已用时间: 7.849(毫秒). 执行号:62606.
SQL> insert into test3 values(2);
影响行数 1
已用时间: 0.913(毫秒). 执行号:62607.
SQL> select id from test3;
行号 id
1 2
已用时间: 0.538(毫秒). 执行号:62608.
SQL> select ID from test3;
行号 ID
1 2
已用时间: 1.324(毫秒). 执行号:62609.
SQL> desc test3;
行号 name type$ nullable
1 id INTEGER Y
已用时间: 7.014(毫秒). 执行号:62610.
SQL> create table “test” (“name” varchar,NAME varchar);
create table “test” (“name” varchar,NAME varchar);
第1 行附近出现错误[-2116]:列[NAME]已存在.
已用时间: 1.207(毫秒). 执行号:0.
2.4测试大小写敏感的PRODB实例
[dmdba@localhost bin]$ ./disql sysdba/Dameng123:5238
服务器[LOCALHOST:5238]:处于普通打开状态
登录使用时间 : 13.836(ms)
disql V8
SQL> select name,instance_name,status$ from v
i
n
s
t
a
n
c
e
;
行号
N
A
M
E
I
N
S
T
A
N
C
E
N
A
M
E
S
T
A
T
U
S
instance; 行号 NAME INSTANCE_NAME STATUS
instance;行号NAMEINSTANCENAMESTATUS
1 PRODB PRODB OPEN
已用时间: 10.530(毫秒). 执行号:62601.
SQL> select value,sys_value from v$parameter where name=‘GLOBAL_STR_CASE_SENSITIVE’;
行号 VALUE SYS_VALUE
1 1 1
已用时间: 5.436(毫秒). 执行号:62602.
SQL> SELECT CASE_SENSITIVE();
行号 CASE_SENSITIVE()
1 1
已用时间: 0.585(毫秒). 执行号:62603.
SQL> CREATE TABLE a(C1 INT);
操作已执行
已用时间: 4.169(毫秒). 执行号:62604.
SQL> SELECT * FROM a;
未选定行
已用时间: 0.916(毫秒). 执行号:62605.
验证表数据
SQL> CREATE TABLE tt(C1 VARCHAR(100));
操作已执行
已用时间: 3.361(毫秒). 执行号:62606.
SQL> INSERT INTO tt VALUES(‘a’);
影响行数 1
已用时间: 0.803(毫秒). 执行号:62607.
SQL> INSERT INTO tt VALUES(‘A’);
影响行数 1
已用时间: 0.546(毫秒). 执行号:62608.
SQL> COMMIT;
操作已执行
已用时间: 0.951(毫秒). 执行号:62609.
SQL> SELECT COUNT() FROM tt WHERE C1=‘a’;
行号 COUNT()
1 1
已用时间: 0.939(毫秒). 执行号:62610.
SQL> SELECT COUNT() FROM tt WHERE C1=‘A’;
行号 COUNT()
1 1
已用时间: 1.080(毫秒). 执行号:62611.
对列的影响
SQL> create table test2(id int);
操作已执行
已用时间: 32.602(毫秒). 执行号:62801.
SQL> desc test2;
行号 NAME TYPE$ NULLABLE
1 ID INTEGER Y
已用时间: 27.989(毫秒). 执行号:62802.
SQL> select id from test2;
未选定行
已用时间: 3.612(毫秒). 执行号:62803.
SQL> select ID from test2;
未选定行
已用时间: 3.851(毫秒). 执行号:62804.
SQL> insert into test2 values(2);
影响行数 1
已用时间: 2.836(毫秒). 执行号:62805.
SQL> select ID from test2;
行号 ID
1 2
已用时间: 1.023(毫秒). 执行号:62806.
SQL> select id from test2;
行号 ID
1 2
已用时间: 0.883(毫秒). 执行号:62807.
SQL> create table test3(“id” int);
操作已执行
已用时间: 18.156(毫秒). 执行号:62808.
SQL> insert into test3 values(2);
影响行数 1
已用时间: 0.731(毫秒). 执行号:62809.
SQL> select id from test3;
select id from test3;
第1 行附近出现错误[-2111]:无效的列名[ID].
已用时间: 1.713(毫秒). 执行号:0.
SQL> select ID from test3;
select ID from test3;
第1 行附近出现错误[-2111]:无效的列名[ID].
已用时间: 0.532(毫秒). 执行号:0.
SQL> select “ID” from test3;
select “ID” from test3;
第1 行附近出现错误[-2111]:无效的列名[ID].
已用时间: 0.821(毫秒). 执行号:0.
SQL> select “id” from test3;
行号 id
1 2
已用时间: 3.870(毫秒). 执行号:62810.
SQL> create table “test” (“name” varchar,NAME varchar);
操作已执行
已用时间: 12.306(毫秒). 执行号:62811.
2.5学习心得
1.大小写敏感
(1)不加双引号,创建表时会自动将表名和列名自动转换成大写形式,加双引号表名和列名则会保留原形式。
(2)大小写不同的两个表是不同对象。
(3)一个表中,允许存在同名但大小写形式不同的字段。
(4)如果不加双引号,SQL语句中表名和对象名会被自动转成大写。
(5)对于表中字符数据是严格区分大小写的。
2.大小写不敏感
(1)无论对不对表名或列名加双引号,表名和列名大小写形式不会发生变化,创建时是大写就是大写,是小写就是小写。
(2)不允许存在同名的数据库对象,即使大小写不同也算同名。
(3)一个表中,不允许出现相同字段名,大小写不同也算同名。
(4)字段字符内容也不区分大小写,无论是大写还是小写都认为是相同的值。
如有兴趣可以上达梦社区查看详情:https://eco.dameng.com