DM8大小写敏感参数解析
1.前言
达梦数据库在初始化实例的时候有一个重要参数叫CASE_SENSITIVE(大小写敏感)。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y。可选参数。
查找达梦资料发现其解释是:标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大小写。看了以后有点感觉但又不是那么清楚,因此对其进行了验证
2.如何设置大小写敏感参数
2.1图形化dbca配置助手
2.2dminit命令行工具
./dminit path=/home/dmdba/dmdbms/data CASE_SENSITIVE=1
2.3注意(1):字符集为GB18030时不能设置大小写敏感为0,设置大小写敏感为0需要修改字符集为UTF-8
注意(2):大小写敏感设置好后不能修改只能查看
SELECT CASE_SENSITIVE();
我们将从三方面来对比参数影响:1.表名.2.列名.3.数据
3.大小写敏感参数设置对表名的影响
3.1大小写敏感时
CREATE TABLE test1 (a1 VARCHAR(100)); 表名小写不加引号
select * from test1; 执行成功
select * from TEST1; 执行成功
select * from "test1"; 执行失败(如图6)
select * from "TEST1"; 执行成功
CREATE TABLE "test2" (a1 VARCHAR(100)); 表名小写加引号
select * from test2; 执行失败(如图7)
select * from TEST2; 执行失败(如图8)
select * from "test2"; 执行成功
select * from "TEST2"; 执行失败(如图9)
CREATE TABLE TEST1 (a1 VARCHAR(100)); 表名相同大写不加引号 建表失败(如图10)
CREATE TABLE "test1" (a1 VARCHAR(100)); 表名相同加引号 建表成功
CREATE TABLE "TEST1" (a1 VARCHAR(100)); 相同表名大写引号的影响 建表失败(如图11)
图6
图7
图8
图9
图10
图11
注意:如果是直接用图形化工具建表非SQL语句,那么表名自动添加引号,强制区分大小写,小写时增删查改也需要添加引号,跟SQL语句引号小写创建的表名一样.
只有小写加引号或者图形化工具直接小写建表,表名显示才为小写.
总结:大小写敏感时.test1,TEST1,"TEST1"相同只能选择一个,否在创建时显示对象已存在且都为TEST1,"test"与图形化工具test一样,增删查改时只能选择"test1"总而言之,以引号区分大小写,只有引号小写才是小写,图形化工具建表表名自带引号.
参数不敏感时
CREATE TABLE test1 (a1 VARCHAR(100)); 表名小写不
select * from test1; 执行成功
select * from TEST1; 执行成功
select * from "test1"; 执行成功
select * from "TEST1"; 执行成功
CREATE TABLE "test2" (a1 VARCHAR(100)); 表名小写加引号
select * from test2; 执行成功
select * from TEST2; 执行成功
select * from "test2"; 执行成功
select * from "TEST2"; 执行成功
CREATE TABLE TEST1 (a1 VARCHAR(100)); 表名相同区分大写不加引号 建表失败(如图15)
CREATE TABLE "test1" (a1 VARCHAR(100)); 表名相同加引号 建表失败(如图16)
CREATE TABLE "TEST1" (a1 VARCHAR(100)); 相同表名大写引号的影响 建表失败(如图17)
图15
图16
图17
总结:参数大小写不敏感时对象名test1,TEST1,“test1”,"TEST1"都相同,只能选一个,引号不影响.
4.大小写敏感参数设置对列名的影响```
CREATE TABLE test1 (a1 VARCHAR(100));
大小写敏感时
INSERT test1(a1) VALUES ('A'); 执行成功
INSERT test1(A1) VALUES ('A'); 执行成功
INSERT test1("a1") VALUES ('A'); 执行失败(如图18)
INSERT test1(A1) VALUES ('A'); 执行成功
CREATE TABLE TEST2 (a1 VARCHAR(100),"a1" VARCHAR(100)); 创建成功
CREATE TABLE TEST2 (a1 VARCHAR(100),A1 VARCHAR(100)); 创建失败(如图19)
CREATE TABLE TEST2 (a1 VARCHAR(100),"A1" VARCHAR(100)); 创建失败(如图20)
大小写不敏感时
INSERT test1(a1) VALUES ('A'); 执行成功
INSERT test1(A1) VALUES ('A'); 执行成功
INSERT test1("a1") VALUES ('A'); 执行失功
INSERT test1(A1) VALUES ('A'); 执行成功
CREATE TABLE TEST2 (a1 VARCHAR(100),"a1" VARCHAR(100)); 创建失败(如图21)
CREATE TABLE TEST2 (a1 VARCHAR(100),A1 VARCHAR(100)); 创建失败(如图22)
CREATE TABLE TEST2 (a1 VARCHAR(100),"A1" VARCHAR(100)); 创建失败(如图23)
图18
图19
图20
图21
图22
图23
总结:列名与表名一样,大小写敏感时.a1,A1,"A1"相同只能选择一个,"a1"与图形化工具tea1一样,增删查改时只能选择"a1"总而言之,以引号区分大小写,只有引号小写才是小写,图形化工具建表列名自带引号(如图24).不敏感时a1,“a1”,A1,"A1"都一样.
图24
5.大小写敏感参数设置对数据的影响
CREATE TABLE test1 (a1 VARCHAR(100));
INSERT test1 VALUES ('A');
INSERT test1 VALUES ('a');
大小写敏感时
SELECT COUNT(*) FROM TEST1 WHERE a1='a'; 结果为 1(如图25)
SELECT COUNT(*) FROM TEST1 WHERE a1='A'; 结果为1(如图26)
大小写不敏感时
SELECT COUNT(*) FROM TEST1 WHERE a1='a'; 结果为2(如图27)
SELECT COUNT(*) FROM TEST1 WHERE a1='A'; 结果为2(如图28)
图25
图26
图27
图28
总结:大小写敏感时会区分字符数据大小写,大小写不敏感时不会区分字符数据大小写.
6.总结
大小写敏感时:对象名 a,A,"A"都相同表示大写,“a"才是固定小写的且增删查改时也要用"a”,列名,表名不能重复,大小写不同是可以的.大小写不敏感时, a,A,“A”,"a"都相同,大小写都相同,引号不影响.图形化工具对象名自带引号.