天天看點

達夢資料庫知識點之-大小寫敏感總結

作者:賀浦力特

檢視資料庫大小寫是否敏感

SELECT CASE_SENSITIVE();

結果為 1 是大小寫敏感;結果為 0 是不敏感

下面從對象名, 字元串内容, 常用工具這三個方面介紹達夢資料庫的大小寫敏感和大小寫不敏感設定的區分和介紹

一 對象名

1. 大小寫敏感

CREATE TABLE TEST.Abc(COL INT); -- 對于建立表, 在大小寫敏感的情況下, 表名Abc不加雙引号, 系統會自動轉換成大寫表名ABC

查詢情況如下:

SELECT * FROM TEST.Abc; -- 執行成功

SELECT * FROM TEST.ABC; -- 執行成功

SELECT * FROM TEST."Abc"; -- error: 無效的表或視圖名[Abc]

SELECT * FROM TEST."ABC"; -- 執行成功

CREATE TABLE TEST."Abc"(COL INT); -- 對于建立表, 在大小寫敏感的情況下, 表名Abc加雙引号, 即建立的表為Abc

查詢情況如下:

SELECT * FROM TEST.Abc; -- error: 無效的表或視圖名[ABC]

SELECT * FROM TEST.ABC; -- error: 無效的表或視圖名[ABC]

SELECT * FROM TEST."Abc"; -- 執行成功

SELECT * FROM TEST."ABC"; -- error: 無效的表或視圖名[ABC]

注意: (大小寫敏感的情況下 ) 在達夢管理工具 (manager ) 中使用圖形化界面的方式建立對象時, 如果使用的是小寫, 系統會自動加上雙引号在查詢的時候必須使用雙引号來通路

2. 大小寫不敏感

CREATE TABLE a(C1 INT); -- 對于建立表, 在大小寫不敏感的情況下, 表名a是否加雙引号, 對查詢結果沒有影響

查詢情況如下:

SELECT * FROM a; -- 執行成功

SELECT * FROM A; -- 執行成功

SELECT * FROM "a"; -- 執行成功

SELECT * FROM "A"; -- 執行成功

CREATE TABLE "b"(C1 INT);

查詢情況如下:

SELECT * FROM b; -- 執行成功

SELECT * FROM B; -- 執行成功

SELECT * FROM "b"; -- 執行成功

SELECT * FROM "B"; -- 執行成功

二字元串内容

CREATE TABLE MMJ(COL VARCHAR(100)); -- 建立表MMJ

INSERT INTO MMJ VALUES('Abc'); -- 插入資料Abc

INSERT INTO MMJ VALUES('ABC'); -- 插入資料ABC

1. 大小寫敏感

SELECT COUNT(*) FROM MMJ WHERE COL='Abc'; -- 結果為1

SELECT COUNT(*) FROM MMJ WHERE COL='ABC'; -- 結果為1

2. 大小寫不敏感

SELECT COUNT(*) FROM MMJ WHERE COL='Abc'; -- 結果為2

SELECT COUNT(*) FROM MMJ WHERE COL='ABC'; -- 結果為2

三不同工具通路資料庫

1. disql通路資料庫

需要注意的是: 密碼中含有 "@ ", "/ "等特殊字元, 此時需要通過轉義符來處理

disql 轉義符使用如下:

linux 環境: 需要使用雙引号将密碼包含進來, 同時外層再使用單引号進行轉義, 具體例子: ./disql SYSDBA/' "abcd@efgh" '@localhost

windows環境: 需要使用雙引号将密碼包含進來, 同時對雙引号使用 "\ "進行轉義, 具體例子: disql SYSDBA/\"abcd@efgh\"@localhost

2. manager通路資料庫

1 ) 大小寫敏感:

建立小寫表對象: 需要添加雙引号來建立

建立大寫表對象: 不需要添加雙引号來

建立查詢小寫表對象: 需要添加雙引号查詢

查詢大寫表對象: 不需要添加雙引号查詢

2 ) 大小寫不敏感:

建立小寫表對象: 需要添加雙引号來建立

建立大寫表對象: 不需要添加雙引号來建立

查詢小寫表對象: 不需要添加雙引号來建立

查詢大寫表對象: 不需要添加雙引号來建立

不論是大小寫敏感還是不敏感, 需要注意 賬号重複

create user "bb " identified by "11111111111 "

create user "BB " identified by "11111111111 " -- 報錯: 對象[BB]已存在

3. DTS遷移工具

1 ) 大小寫敏感:

表對象小寫: 如果想要遷移過來表對象仍然保持小寫, 需要勾選 "保持對象名大小寫 ", 後期查詢時, 需要使用雙引号查詢

表對象大寫: 不需要勾選 "保持對象名大小寫 ", 後期查詢時, 不需要使用雙引号查詢, 因為會自動轉換成大寫查詢

2 ) 大小寫不敏感:

表對象小寫: 如果想要遷移過來表對象仍然保持小寫, 需要勾選 "保持對象名大小寫 ", 後期查詢時, 不需要使用雙引号查詢

表對象大寫: 不需要勾選 "保持對象名大小寫 ", 後期查詢時, 不需要使用雙引号查詢, 因為會自動轉換成大寫查詢

總結

1. 在大小寫敏感的資料庫中

1 ) 建立表:

若表名或列名未添加雙引号 "", 則表名和列名會自動轉換為大寫形式;

若對表名或列名添加雙引号 "", 則會固定書寫時的大, 小寫;

同名的資料庫對象, 如果大小寫不同, 那麼則為兩個不同的對象

2 ) 字段同上:

一個表中, 即使是相同的字段名, 隻要大小寫不同, 允許存在同名且不同大小寫形式的字段

3 ) DML 或 DDL 操作時:

如果不對表名或列名添加雙引号 "", 那麼表名和列名都自動轉換為大寫形式;

對表進行 DML 操作時, 如果沒有小寫形式的字段, 不能采取小寫加 "" 的形式指定過濾字段, 會被認定為無效的字段;

如果對表名或列名添加 "" 會固定書寫時的大, 小寫形式, "" 中是大寫形式, 則過濾字段就是大寫字段, "" 中是小寫字段, 則過濾字段就是小寫字段;

對其進行 DML 操作時, 需要利用 "" 指定表名和字段名, 否則預設會認定以大寫形式去查詢對象

查詢時, '' 和 "" 界定符中字元串區分大小寫, 界定符中的字元串若是大寫形式, 那僅查詢這個大寫形式的對象, 若是或小寫形式, 那僅查詢這個小寫形式的對象, DML 操作依舊

2. 大小寫不敏感的資料庫中

1 ) 建立表時:

無論對不對表名或列名添加雙引号 "", 表名和列名的大小寫形式不會發生變化, 大寫形式就是大寫形式, 小寫形式就是小寫形式;

2 ) 字段同上:

不允許相同的字段名, 即使大小寫不同;

查詢時, '' 和 "" 界定符不區分大小寫, 界定符中的查詢或過濾條件即使是大寫或小寫, 都可以查詢到預期的結果集.

3 ) DML 或 DDL 操作時:

無論對不對表名或列名添加 "", 表名和列名的大小寫形式不會發生變化, 大寫形式就是大寫形式, 小寫形式就是小寫形式;

一個表中, 不允許相同的字段名, 即使大小寫不同;

查詢時, '' 和 "" 界定符不區分大小寫, 界定符中的查詢或過濾條件即使是大寫或小寫, 都可以查詢到預期的結果集, 進行 DML 操作時依舊

在大小寫不敏感的情況下, 以上情況均不允許存在同名的資料庫對象, 即使大小寫不同, 預設也隻能存在一個

繼續閱讀