摘抄 DB2字符集問題

2022-01-11 19:13:43 字數 2175 閱讀 4822

三個層次的字符集

在db2資料庫中,與字符集相關的問題主要有三個層次的字符集的設定,其中系統級別和例項級別的字符集可以根據需求進行修改,而資料庫級別的資料集則必須在建庫時確定。

(1)作業系統 locale:系統級別的**頁設定,決定應用程式的預設**頁;

假如大家希望將 os locale 設定為中文,可以考慮下面的方法:

unix:大家可以通過 export lang=」zh_cn」 命令修改當前的 locale 到中文;

windows:在「開始->設定->控制面板->區域選項」中進行對系統的語言設定進行選擇;

(2)db2codepage:db2 例項級別的**頁設定,它會影響db2相關應用程式對**頁轉換時做出**頁判定。

大家可以通過 db2set db2codepaeg= 命令將 db2codepage 設定為你需要的字符集。

(3)database codepage:db2 資料庫級別的**頁設定;必須在建庫時進行設定。

大家在建立資料庫時必須指定需要的**頁:

db2 "create database dbname using codeset utf-8 territory cn"

注釋:這條語句可用於建立指定區域為中國(cn)的 unicode 資料庫。

客戶端字符集

db2的字符集是資料庫上的特性,同乙個例項下的資料庫可以有各自不同的字符集,例如:

create database testdb on 『e:』 using codeset gbk territory cn with 『baal」s test db』

則會建立乙個1386(cn)的資料庫

當客戶端連線到資料庫的時候,他們的字符集要相互相容,否則就會報下邊類似的錯誤:

$ db2 connect to lord

sql0332n  character conversion from the source code page 「819″ to the target

code page 「1386″ is not supported.  sqlstate=57017

上邊的錯誤則說明server端的字符集是819的,而客戶端的字符集是1386(cn)的,db2不能server端819的字符集轉化為client端1386的字符集。解決這個問題的思想是將client端的字符集改為與server端相容的:

例如上例可以將client端字符集改為819或者1208(utf-8),步驟:

$ db2set db2codepage=819               —–或者unicode(utf-8) 1208

$ db2set db2country=us

$ db2 terminate

$ db2stop force

$ db2start

這樣客戶端的字符集就變為819活著1208,再連線就不會報錯。

其他說明

對於中文,盡量使用gbk字符集,而不是utf-8,因為後者乙個漢字長度為3而不是2。

這樣就把資料庫或每張表的字元編碼設為utf8了,當我們直接用mysql或db2自帶的命令視窗去插入中文時,卻不能插入,這就是命令視窗的編碼問題了。

一般命令視窗的字元編碼應該為gbk,這樣我們才能正常的插入和顯示。如mysql中可以用配置檔案my.ini制定gbk,也可以在視窗中打set names gbk;

db2中在命令視窗中打 db2set db2codepage=1386。當我們敲中文插資料進去時,實際上表資料就是以utf8儲存的,而在命令視窗下由於設定成了gbk,我們就能正常看到中文了。

當用mysql中 source d:/insertdata.sql或用db2中的db2 -tf d:/**.sql 這種執行sql檔案的命令時,該sql必須和當前命令視窗的字元編碼一致,就是上述的gbk,可用記事本另存為ansi即行。如果sql編碼不一致,如是 utf8,那麼客戶端的gbk不能識別檔案中的utf8編碼格式,是不能儲存中文或其他非英文本元的。

總之,如果用了自帶的命令視窗,mysql的匯入檔案的編碼必須和命令視窗的字元編碼一致,否則裡面的資料中的中文字元等無法正常識別,而db2的命令視窗一般還是設成1386,即gbk就行,檔案也是ansi格式的,不會出錯!

DB2字元處理函式

字串連線運算 db2中使用的是 一 字元轉換函式 1 ascii 返回字元表示式最左端字元的ascii 碼值。在ascii 函式中,純數字的字串可不用 括起來,但含其它字元的字串必須用 括起來使用,否則會出錯。2 char 將ascii 碼轉換為字元。如果沒有輸入0 255 之間的ascii 碼值,...

DB2字串連線

db2字串連線 db2字串連線和oracle資料庫相同,使用 進行db2字串連線,其使用方式和mssqlserver中的加號 一樣。比如執行下面的sql語句 select 工號為 fnumber 的員工姓名為 fname from t employee where fname is notnull ...

DB2字串連線

db2字串連線 db2字串連線和oracle資料庫相同,使用 進行db2字串連線,其使用方式和mssqlserver中的加號 一樣。比如執行下面的sql語句 select 工號為 fnumber 的員工姓名為 fname from t employee where fname is not null...