达梦数据库CASE_SENSITIVE参数深入理解


一、实验要求

深入理解CASE_SENSITIVE参数的作用,涉及大小写敏感的配置和差异

二、功能作用

CASE_SENSITIVE

  • 功能:标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较。
  • 取值:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。
  • 配置:dminit时指定。可选参数
  • 说明:此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数置。

三、实验步骤

1 初始化

分别初始化CASE_SENSITIVE状态为【开启】的数据库实例DB1,和状态为【关闭】的数据库实例DB2:
DB1:

./dminit path=/dm8/data DB_NAME=db1 instance_name=db1 port_num=6001 case_sensitive=1

DB2:

./dminit path=/dm8/data DB_NAME=db2 instance_name=db2 port_num=6002 case_sensitive=0

2 CASE_SENSITIVE状态为【开启】

SQL> create table Table1(id int, "id1" int, "iD2" int);
SQL> select TABLE_NAME FROM dba_tables where OWNER='SYSDBA';
SQL> desc Table1;
SQL> create table TABLE1(id int, "id1" int, "iD2" int);
SQL> create table table1(id int, "id1" int, "iD2" int);
SQL> create table "TAble1"(id int, "id1" int, "iD2" int);

在这里插入图片描述
现象1:不加双引号的表明和列明是大写。说明开启大小写敏感时,创建的对象名会被默认转换为大写。
现象2:加了双引号的表名和列名不变。
结论:开启大小写敏感时,会把不加双引号的对象转换为大写,保持双引号内对象的大小写状态不变。所以不加双引号时,创建对象的字符串拼写相同,大小写不同的对象被认定为等同;但加上双引号之后,字符串拼写相同,大小写不同的对象被识别为不同对象。

3 CASE_SENSITIVE状态为【关闭】

SQL> create table Table1(id int);
SQL> select TABLE_NAME FROM dba_tables where OWNER='SYSDBA';
SQL> desc Table1;
SQL> create table "tAble1"(id int);
SQL> create table TABLE1(id int);

在这里插入图片描述
现象:创建表名为Table1的表成功,且表名未做大小写转换;后续创建"tAble1"和TABLE1表均失败。原因是比较表名时,字符均被转换为小写字母来比较,所以显示表已存在。
结论:大小写敏感状态关闭时,由于比较时会转换为小写,故只要字符串拼写一样,无论大小写,对象均认为是等同的。

社区地址:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值