在数据库的使用过程中,经常会遇到各种各样的问题,想要做到事半功倍,对数据库的了解以及在做数据库设计的时候就应该考虑很多问题,在初始化实例之前需要向用户说明哪些参数初始化实例之后不能改,相关参数的作用,如字符集GB18030是比UTF-8节省体积等。下面说明DM大小写敏感的区别
初始化实例
达梦数据库大小写敏感是由case_sensitive参数来控制大小写敏感的
设置大小写不敏感时,不能设置GB18030字符集
大小写敏感:./dminit path=/dmdata case_sensitive=1 charset=1 db_name=case1 instance_name=sensitive
大小写不敏感;./dminit path=/dmdata case_sensitive=0 charset=1 db_name=case0 instance_name=insensitive
查询大小写是否敏感SELECT SF_GET_CASE_SENSITIVE_FLAG();
1表示敏感,0表示不敏感。
通过DM管理工具也能查看到,右键连接,选择管理服务器
大小写不敏感
create table test(name varchar);
执行成功, 执行耗时72毫秒. 执行号:51512
insert into test values('aaa');
执行成功, 执行耗时2毫秒. 执行号:51513
insert into test values('AAA');
执行成功, 执行耗时1毫秒. 执行号:51514
insert into TEST(NAme) values('bbb');
执行成功, 执行耗时1毫秒. 执行号:51515
create table Test(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[test]已存在
create table TEST(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[test]已存在
select dbms_metadata.get_ddl('TABLE','test','SYSDBA')from dual;
/* 查询结果
CREATE TABLE "SYSDBA"."test"
(
"name" VARCHAR(8188)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
drop table test;
create table "Test"(name varchar);
select dbms_metadata.get_ddl('TABLE','test','SYSDBA')from dual;
/*查询结果
CREATE TABLE "SYSDBA"."Test"
(
"name" VARCHAR(8188)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
create test1(name varchar(10),NAME varchar(10));
执行失败
总结:
- 无论对不对表名或列名加双引号,表名和列名大小写形式不会发生变化,创建时是大写就是大写,是小写就是小写。
- 不允许存在同名的数据库对象,即使大小写不同也算同名。
- 一个表中,不允许出现相同字段名,大小写不同也算同名。
大小写敏感库
create table test(name varchar);
执行成功, 执行耗时127毫秒. 执行号:51508
insert into test values('aaa');
执行成功, 执行耗时2毫秒. 执行号:51509
insert into test values('AAA');
执行成功, 执行耗时2毫秒. 执行号:51510
insert into TEST(NAme) values('bbb');
执行成功, 执行耗时1毫秒. 执行号:51511
create table Test(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[TEST]已存在
create table TEST(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[TEST]已存在
create table "Test"(name varchar);
执行成功, 执行耗时5毫秒. 执行号:51519
select dbms_metadata.get_ddl('TABLE','test','SYSDBA')from dual;
执行失败(语句1)
未找到对象或不允许查询系统定义的内部索引
select dbms_metadata.get_ddl('TABLE','TEST','SYSDBA')from dual;
/* 查询结果
CREATE TABLE "SYSDBA"."TEST"
(
"NAME" VARCHAR(8188)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
create table test1("name" varchar(10),"NAME" varchar(10));
执行成功, 执行耗时24毫秒. 执行号:51521
总结:
- 不加双引号,创建表时会自动将表名和列名自动转换成大写形式,加双引号表名和列名则会保留原形式。
create table test和create table "test"是不同的,前者会自动转换成TEST,后者保留原形式test。 - 大小写不同的两个表是不同对象。
- 一个表中,允许存在同名但大小写形式不同的字段。