linux下db2執行指令碼亂碼問題

2021-07-02 19:52:33 字數 825 閱讀 9424

db2資料庫存在三種級別的字符集:作業系統級lang、例項級(客戶端級)db2codepage、資料庫級database code page/set。

作業系統級是使用者應用程式使用的**頁。可以使用環境變數lang=c等來設定。用set命令、或者echo $lang檢視其值。

例項級db2應用程式進行客戶端到資料庫服務端**頁轉換時使用的,比如使用sql指令碼時,db2讀取指令碼時就是按照例項級的字符集db2codepage來識別該指令碼的。可用db2set -all來檢視其值。可用db2set db2codepage=1208來設定其值。

資料庫級的字符集是在建立資料庫時指定的,是後續不可修改的。設定語句類似db2 "create database dbname using codeset utf-8 territory cn"。可以在連庫後,使用db2 get db cfg for dbname命令,來檢視database code page/set的值。

本問題中資料庫級的字符集是1386,即gbk字符集;終端例項級的字符集也是1386字符集。但是,sql指令碼是utf-8格式的,db2按照1386字符集去讀取utf-8格式的指令碼就會出現不可識別的亂碼,最終報錯sql0010n。

解決辦法是臨時修改例項級字符集為utf-8格式,執行完指令碼後再恢復為gbk格式。

db2 connect to dbname

db2set db2codepage=1208

db2 terminate

db2 connect to dbname

db2 -tvf *.sql  //執行sql指令碼

db2set db2codepage=1386

db2 terminate

DB2執行指令碼

通過db2命令直接執行指令碼語句 db2 tvf x 檔名及路徑 eg db2 tvf e test.sql 命令解釋 s 在命令出錯時停止執行 t 設定語句終止字元 v 回送當前命令 f 讀取輸入檔案 t 為預設終止字元 各語句以 終止 通過 d也可以設定其它終止字元,如以 終止則相應命令為 db...

db2 指令碼 db2和 sql 類行指令碼執行

特別是專案公升級需要執行大量指令碼,所以執行資料指令碼變得很實用,很方便。在執行指令碼是時,必須鏈結資料庫,db2 connect to datbase name user user name using user pwd 然後跳轉指令碼磁磁碟儲存的為位置 d 執行資料庫指令碼 db2 tf tmi...

DB2執行sql指令碼

在實際生產中可能會拿到較多的建表sql語句,當這些sql語句存在於同乙個檔案中時,除了用資料庫工具執行檔案內容時,還可以直接在xhell中的linux環境下執行指令碼 使用下面的命令執行create.sql指令碼 db2 t v f script1.sql z script1.log 或 db2 t...