達夢數據庫DM8 - 關於字母大小寫、單引號、雙引號

達夢數據庫DM8 - 關於字母大小寫、單引號、雙引號_達夢 字段 引號-CSDN博客

近期對達夢數據庫DM8做測試時候,有個問題困擾了我大半天,百度幾個來回也沒找到原因。

最開始是使用dexp導出表的時候一直報錯,最終發現跟建表的時候使用小寫字母有關係。從而延伸出單引號、雙引號的使用。

 

下面系統的對大小寫、單引號、雙引號做一個測試。

 

首先,在初始化數據庫的時候,默認勾選了“字符串比較大小寫敏感”。

這樣,數據庫初始化完成後,建表的時候,如果表名或列名使用小寫字母,那麼今後書寫SQL語句的時候就要麻煩很多了,必須嚴格區分單引號、雙引號的使用。字符串常量應使用單引號括起,關鍵字、對象名、字段名、別名等則使用雙引號括起。

同時,在大小敏感的數據庫下,使用dexp導出數據庫、模式正常,但導出小寫字母創建的表時,卻一直提示“表不存在或者爲系統內部對象,請覈對後再進行輸入”。( 這算bug嗎 -_?)

大小寫敏感的數據庫初始化完成後,分別建了3張表, 表a的表名和列名均小寫, 表B的表名大寫,列名小寫, 表C的表名和列名均大寫

建表語句如下:

 
  1. create table "a"
  2. (
  3. "c1" INT not null ,
  4. "c2" CHAR(10)
  5. );
  6. create table "B"
  7. (
  8. "c1" INT not null ,
  9. "c2" CHAR(10)
  10. );
  11. create table "C"
  12. (
  13. "C1" INT not null ,
  14. "C2" CHAR(10)
  15. );
 

場景1: 針對表名和列名都是小寫字母的表,下圖3種執行結果:

1、表名不用引號括起,提示“無效的表或視圖名”;

2、表名使用單引號括起,被當成字符串,報語法錯誤;

3、表名使用雙引號,正常顯示查詢結果。

場景2:針對表名和列名都是小寫字母的表,下圖3種執行結果:

1、列名不用引號括起,報錯“無效的列名”。

2、列名使用單引號括起,列名被當成字符串,顯示到查詢結果。

3、列名使用雙引號括起,成功執行語句並顯示正確結果。

場景3:針對表名和列名都是小寫字母的表,下圖3種執行結果:

1、條件語句的字符串不使用引號括起,報錯“無效列名”。

2、條件語句的字符串使用單引號括起,正常顯示正確結果。

3、條件語句使用雙引號括起,報錯“無效列名”。

場景4:針對表名大寫,列名小寫的表,執行結論如下:

  • 表名大寫時,即使表名不使用雙引號括起,也能正常執行語句。
  • 列名是小寫字母,所以依舊還是需要使用雙引號括起。
  • 字符串則只能使用單引號括起,不能用雙引號。

場景5:針對表名和列名均大寫的表,執行結論如下:

  • 表名和列名不使用引號,或使用雙引號括起,均正常執行語句顯示正確結果。當然,字符串依舊只能使用單引號。

場景6: 數據庫初始化時候,取消勾選“字符串比較大小寫敏感”。同樣創建小寫字母的表a,列名也使用小寫字母。

表名和列名不使用引號或使用雙引號均正常執行並顯示正確結果。字符串依舊是必須單引號括起。

 

以上測試可能是達夢數據庫產品對大小寫的設定原本就是這樣。但是下面測試dexp導出表就有問題了。

先登錄大小寫敏感的數據庫,使用dexp導出數據庫,正常無報錯。

再使用dexp導出模式u_test,也正常無報錯。

但當要導出小寫字母創建的表的時候,不管表名列名是否使用引號,均會提示“表 XXX.XX 不存在或者爲系統內部對象,請覈對後再進行輸入”。如下截圖所示。

重新連接大小寫不敏感的數據庫,再使用dexp導出小寫字母創建的表 ,則不管表名是否使用引號括起,均能正常導出。

 

總結:

在字母大小寫敏感的數據庫,創建表時,不管是表名還是列名,都應使用大寫字母。否則,在執行SQL語句的時候,字符串常量應使用單引號括起,關鍵字、對象名、字段名、別名等則使用雙引號括起。但以小寫字母爲表名的表,在使用dexp導出表的時候,會無法正常導出(這個也許是個bug吧)。所以,在大小寫敏感的數據庫,建議建表的時候,就應當完全使用大寫字母建表。

達夢數據庫:無法自動獲取數據庫類型,請通過 dialect 參數指定!_升級pagehelper的版本5.2.0 達夢數據庫-CSDN博客

 

項目使用的Mybatis和PageHelper的版本是4.1.0,數據庫國產化升級,報錯:
問題解決:Cause: com.github.pagehelper.PageException: 無法自動獲取數據庫類型,請通過 dialect 參數指定!

解決方式:
升級pageHelper的版本5.2.0.

原因:
新版加入了PageAutoDialect
registerDialectAlias(“dm”, OracleDialect.class);

達夢數據源適配Hibernate-jpa_java項目利用hibernate連接達夢數據庫-CSDN博客

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章