DM實例大小寫敏感的區別


在數據庫的使用過程中,經常會遇到各種各樣的問題,想要做到事半功倍,對數據庫的了解以及在做數據庫設計的時候就應該考慮很多問題,在初始化實例之前需要向用戶說明哪些參數初始化實例之后不能改,相關參數的作用,如字符集GB18030是比UTF-8節省體積等。下面說明DM大小寫敏感的區別

初始化實例

達夢數據庫大小寫敏感是由case_sensitive參數來控制大小寫敏感的
設置大小寫不敏感時,不能設置GB18030字符集
image

大小寫敏感:
./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();
image
1表示敏感,0表示不敏感。
通過DM管理工具也能查看到,右鍵連接,選擇管理服務器
image
image

大小寫不敏感

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));
執行失敗

總結:

  1. 無論對不對表名或列名加雙引號,表名和列名大小寫形式不會發生變化,創建時是大寫就是大寫,是小寫就是小寫。
  2. 不允許存在同名的數據庫對象,即使大小寫不同也算同名。
  3. 一個表中,不允許出現相同字段名,大小寫不同也算同名。

大小寫敏感庫

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

總結:

  1. 不加雙引號,創建表時會自動將表名和列名自動轉換成大寫形式,加雙引號表名和列名則會保留原形式。
    create table test和create table "test"是不同的,前者會自動轉換成TEST,后者保留原形式test。
  2. 大小寫不同的兩個表是不同對象。
  3. 一個表中,允許存在同名但大小寫形式不同的字段。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM