达梦数据库默认是对大小写敏感,当然这个值是可以设置的
在一般的情况下,字段内容是应用自行管理的,应用自己也好控制,但是对于字段名,作为开发,可能非常头疼。这里有两个基本知识,我们一定需要知道,对于数据库来说,是希望对开发友好的,所以达梦数据库的策略和Oracle 的策略一样:
1. 在建立对象的时候,随便写大写还是小写,数据库都处理成大写
2. 在查询的时候,对象名,不论写成大写还是小写,数据库都看成大写,在数据库中进行查询
所以,当你查询的时候,返回的字段也必然是大写,那如何将字段变成小写呢?
这个方式就是:为对象名(字段名、表名、存储过程等等)加上双引号。
举三个例子:
Create table test1(v1 int); 和 select v1 from test1;
在数据库中处理的是:
CREATE TABLE TEST1(V1 INT); 和 SELECT V1 FROM TEST1;
-- 查询语句是正确的,不会报错
create table test1(v1 int); 和 select "v1" from test1;
在数据库中处理的是:
CREATE TABLE TEST1(V1 INT); 和 SELECT v1 FROM TEST1;
-- 查询语句会报错:无效的列名v1 ,因为这里的列名是 V1 。
create table test1("v1" int); 和 select v1 from test1;
在数据库中处理的是:
CREATE TABLE TEST1(v1 INT); 和 SELECT V1 FROM TEST1;
-- 查询语句会报错:无效的列名V1 ,因为这里的列名是 v1 。
当然,下面的这些,查询语句也都是正确的,不会报错:
Create table test1( V1 int); 和 select v1 from test1;
在数据库中处理的是:
CREATE TABLE TEST1(V1 INT); 和 SELECT V1 FROM TEST1;
-- 查询语句是正确的,不会报错
Create table test1(v1 int); 和 select V1 from test1;
在数据库中处理的是:
CREATE TABLE TEST1(V1 INT); 和 SELECT V1 FROM TEST1;
-- 查询语句是正确的,不会报错
总的来说,对于字段或者对象名的问题,①要么全部(建立或者查询时), 都不加双引号(建议这种方式,这个也不要建立和查询时,名字大小写完全对应),②要么,全部都加双引号,且必须保证建立和查询时,双引号里面的内容,完全一致。
当然,有时候我们就是都加了双引号,或者部分加了,部分没加,大小写对不上怎么办?
——不要忘了,我们还有“大小写是否敏感”这个设置。设置成不敏感,这个“对不上”,就是对的上了。只是要注意,这个还会影响字段内容的判断。
那么问题来了,什么叫做影响字段内容的判断?
例如下面:
Create table test1(v1 varchar(200));
insert into test1 values('a');
insert into test1 values('A');
insert into test1 values('b');
select * from test1 where v1='A';
-- 在敏感的库里,只能查出一条数据
-- 在不敏感的库里,能查出两条数据
select * from test1 where v1='a';
-- 在敏感的库里,只能查出一条数据
-- 在不敏感的库里,能查出两条数据
select * from test1 where 'A'='a';
-- 在敏感的库里,不能查出来任何数据
-- 在不敏感的库里,能查出整个表中全部的数据
参考: