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总结:
①如果不对表名或列名添加" ",那么表名和列名都自动转换为大写形式。
②如果对表名或列名添加" ",会固定书写时的大、小写形式,书写时采取的是小写形式,那么就定型为小写形式,其他不添加” "的则自动转换为大写形式,无论书写时采取的是大写形式或小写形式。
③同名的数据库对象,如果大小写不同,那么则为两个不同的数据库对象。
④查询操作不带双引号则默认是大写,指定字段小写需要加上双引号。
⑤一个表中,允许存在同名且不同大小写形式的字段。