深入理解CASE_SENSITIVE参数的作用

CASE_SENSITIVE

        CASE_SENSITIVE值的含义:当CASE_SENSITIVE=N(n)/0时为大小写不敏感,当CASE_SENSITIVE=Y(y)/1时为大小写敏感。该参数是可选参数,缺省时默认为Y。CASE_SENSITIVE参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数置。

对比CASE_SENSITIVE取值不同的情况

CASE_SENSITIVE=N(n)/0

初始化大小写不敏感实例、注册启动服务

初始化实例TEST1(大小写不敏感)

        输入:

./dminit PATH=/dmdata/data/ DB_NAME=TEST1 instance_name=TEST1 SYSDBA_PWD=DAMENGDBA PORT_NUM=5237 CASE_SENSITIVE=N

        创建服务(用root用户进入/home/dmdba/dmdbms/script/root)

        输入:

./dm-service_installer.sh -t dmserver -p TEST1 -dm_ini /dmdata/data/TEST1/dm.ini

        启动服务(用dmdba用户进入/home/dmdba/dmbms/bin)

        输入:

 ./DmServiceTEST1 start

测试

        连接数据库(使用dmdba用户进入/home/dmdba/dmdbms/bin)

        输入:

./disql SYSDBA/DAMENGDBA:5237

        查看数据库名称、状态、CASE_SENSITIVE参数的值

        输入:

select name,instance_name,status$ from v$instance;

SELECT CASE_SENSITIVE();

        如下图所示:

        输入:

CREATE TABLE a (b int);

CREATE TABLE A (B int); --对象[a]已存在

        如下图所示:

        说明:不允许存在同名的表,大小写不同也不行,a和A只能存在一个。

        输入:

SELECT * FROM a;

SELECT * FROM A;

SELECT * FROM " a";

SELECT * FROM " A";

        如下图所示:

        说明:无论加不加" "不影响表名大小写。

        输入:

create table test1("id" int,name varchar(10));

INSERT INTO TEST1 VALUES(1,'Test');

INSERT INTO test1 VALUES(2,'TEST');

INSERT INTO TeSt1 VALUES(3,'test');

INSERT INTO tEsT1 VALUES(4,'tEST');

        如下图所示:

        输入:

SELECT * FROM TEST1 WHERE name='test';

SELECT * FROM test1 WHERE name='TEST';

        如下图所示:

        输入:

SELECT * FROM TEST1 WHERE "ID"=1;

SELECT * FROM TEST1 WHERE "id"=1;

SELECT * FROM TEST1 WHERE ID=1;

SELECT * FROM TEST1 WHERE id=1;

        如下图所示:

        说明:查询时,' '和" "界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集。无论加不加" ",不影响列名大小写。

        输入:

CREATE TABLE TEST2(ID int,id int);

CREATE TABLE TEST2("ID" int,"id" int);

        如下图所示:

        说明:一个表中不允许存在同名字段,大小写不同也不行,id和ID只能存在一个。

总结

        CASE_SENSITIVE=N(n)/0总结:

        ①不允许存在同名的数据库对象,即使大小写不同,默认也只能存在一个

        ②无论对不对表名或列名添加" ",表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式

        ③查询时,' '和" "界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集

        ④一个表中,也不允许相同的字段名,即使大小写不同

CASE_SENSITIVE=Y(y)/1

初始化大小写敏感实例、注册启动服务

        初始化实例TEST2(大小写敏感)

        输入:

./dminit PATH=/dmdata/data/ DB_NAME=TEST2 instance_name=TEST2 SYSDBA_PWD=DAMENGDBA PORT_NUM=5238 CASE_SENSITIVE=Y

        创建服务(用root用户进入/home/dmdba/dmdbms/script/root)

        输入:

./dm-service_installer.sh -t dmserver -p TEST2 -dm_ini /dmdata/data/TEST2/dm.ini

        启动服务(用dmdba用户进入/home/dmdba/dmbms/bin)

        输入:

./DmServiceTEST2 start

测试

        连接数据库(使用dmdba用户进入/home/dmdba/dmdbms/bin)

        输入:

./disql SYSDBA/DAMENGDBA:5238

        查看数据库名称、状态、CASE_SENSITIVE参数的值

        输入:

select name,instance_name,status$ from v$instance;
SELECT CASE_SENSITIVE();

        如下图所示:

        输入:

CREATE TABLE a(b int);
SELECT * FROM a;
SELECT * FROM A;
SELECT * FROM "a";
SELECT * FROM "A";

        如下图所示:

        说明:创建表的时候如果表名没添加" "表名将会自动转化为大写形式。

        输入:

SELECT b FROM a;
SELECT B FROM a;
SELECT "b" FROM a;
SELECT "B" FROM a;

        如下图所示:

        说明:创建表的时候如果列名没添加" "列名名将会自动转化为大写形式。

        输入:

CREATE TABLE "b"(c int);
CREATE TABLE "B"(c int);

        如下图所示:

        说明:同名的,如果大小写不同,那么则为两个不同的表。

        输入:

create table test1("id" int,name varchar(10));
INSERT INTO TEST1 VALUES(1,'Test');
INSERT INTO test1 VALUES(2,'TEST');
INSERT INTO TeSt1 VALUES(3,'test');
INSERT INTO tEsT1 VALUES(4,'tEST');

        如下图所示:

        输入:

SELECT * FROM TEST1;
SELECT * FROM TEST1 WHERE NAME='test';
SELECT * FROM TEST1 WHERE "id"=1;
SELECT * FROM TEST1 WHERE id=1;

        如下图所示:

        说明:查询操作不带双引号则默认是大写,指定字段小写需要加上双引号

        输入:

CREATE TABLE TEST2("ID" int,"id" int);

        如下图所示:

        说明:一个表中,允许存在同名且不同大小写形式的字段。

总结

        CASE_SENSITIVE=Y(y)/1总结:

        ①如果不对表名或列名添加" ",那么表名和列名都自动转换为大写形式

        ②如果对表名或列名添加" ",会固定书写时的大、小写形式,书写时采取的是小写形式,那么就定型为小写形式,其他不添加” "的则自动转换为大写形式,无论书写时采取的是大写形式或小写形式。

        ③同名的数据库对象,如果大小写不同,那么则为两个不同的数据库对象。

        ④查询操作不带双引号则默认是大写,指定字段小写需要加上双引号

        ⑤一个表中,允许存在同名且不同大小写形式的字段。

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值