原标题:【干货分享】如何理解DM7中的大小写敏感
1.前言
在我们初始化达梦数据库的时候,有一个重要的参数,叫做大小写敏感。
我们很容易知道这个参数的意思,这参数决定数据库区分字符串时是否区分大小写。同时我们也可以用select case_sensitive来查看当前数据库的大小写敏感情况,1表示敏感,0表示不敏感。
那么,我们勾不勾选这个选项,对我们的数据库又有什么影响呢,本文就将给大家做个演示。
注:本文实验环境的DM7数据库版本为:
DM DatabaseServer x64 V7.1.6.46-Build(2018.02.08-89107)ENT
2.关闭大小写敏感参数的情况
创建表
create table test2(aa varchar(30));
查看存储字段为小写
select name from SYSOBJECTS where name ='test2'
如果使用大写表名查看,也可以查到
select name from SYSOBJECTS where name ='TEST2'
但是结果仍然是小写
通过小写的字段名查看,可以找到
select * from SYSCOLUMNS where NAME like '%aa%' and ID=(select ID from SYSOBJECTS where name ='test2');
通过大写的字段名查看,也可以找到
select * from SYSCOLUMNS where NAME like '%AA%' and ID=(select ID from SYSOBJECTS where name ='test2');
此时,如果我们尝试创建表大写的TEST2,则会报错提示该表已存在
总结:由此我们可知,在大小心不敏感的情况下,如果我们用小写的名字创建表,SQL不会自动把表名转换为大写。但是,在查询时,我们可用任意的大小写来进行查询。同时,表test和TEST在数据库中会被识别文同一个对象,所以在有test表的情况下,再创建TEST表时则会报错。
3.开启大小写敏感参数的情况
创建表
create table test2(aa varchar(30));
此时如果我们用小写的表名去查询
select name from SYSOBJECTS where name ='test2',则会查不到结果。
事实上,此时该表会以大写的的名字存在数据库中,这是因为,我们没有用双括号把test2引起来。在大小写敏感的环境下,系统会把SQL中的没有标识符的小写名字自动转换为大写存在数据库中,验证如下:
通过大写表名来查询,就可以找到
select name from SYSOBJECTS where name ='TEST2'
所以在大小写敏感的情况下,如果我们想要创建小写的表名,则要这样写
create table"test2"("aa" varchar(30));
这时创建语句不会报错,证明同名的大小写表名是可以在大小写敏感的数据库中共存的,测试也确实如下:
select name from SYSOBJECTS where name in ('TEST2','test2')
总结:当开启大小写敏感的时候,如果我们想要利用SQL语句查询或者创建小写的对象名,我们需要利用双括号把小写部分括起来,否则系统会自动把内容转换为大写;同时,大写和小写的对象名在系统中是被区分开,可以共存的。返回搜狐,查看更多
责任编辑: