在sybase系統中使用中文的若干方面

wenpingblog發表於2011-05-12
如何選擇ASE字符集使之支援簡體中文字元
  目前在ASE 12.5中支援中文字元的字符集有四種:CP936,EUCGB,UTF-8和GB18030。其中EUCGB字符集是基於GB2312-80編碼規範的,它的EUC (Extended Unix Code)編碼範圍是第一位元組0xA1~0xFE(實際只用到0xF7),    第二位元組0xA1~0xFE。
CP936字符集是基於GBK編碼規範(實際上的國家標準是GB13000-90),是對GB2312進行的擴充套件,第一位元組為0x81~0xFE,  第二位元組分兩部分,一是0x40~0x7E,二是0x80~0xFE。其中和GB2312相 同的區域,字完全相同。
 
GB18030字符集(國家標準號是GB18030-2000)是2000年3月17日釋出的新的中文編碼標準。它是GB2312的擴充, 採用單/雙/四位元組編碼體系結構,收錄了27000多個漢字以及臧文、蒙文、維吾爾文等主要的少數民族文字。

Sybase 從ASE 12.5.0.3之後開始支援GB18030字符集。

UTF-8字符集是現有ASCII系統向Unicode轉換的一個過渡方案。它使用1-3位元組表示一個字元。
簡體中文的每個字元在utf8中的長度基本上都是3個位元組。它的最主要的優點是可以同時支援超過650種語言的字元。  缺點是針對中文字元來說,需要增加50%的空間用來儲存。還有一個問題是執行sp_helptext顯示儲存過程體的時候, 有可能出現半個漢字。

一般來說,由於EUCGB不支援國標一、二級字型檔以外的漢字,所以我們推薦使用者在伺服器端和客戶端都使用CP936字符集,  或者在ASE 12.5.0.3之後還可以使用GB18030字符集,它可以支援一些比較生僻的漢字。它的不足是隻有一種排序方式,  即區分大小寫的Binary方式。所以,如果需要使用支援中文字符集且不區分大小寫的資料庫時,就只能使用UTF-8作為服 務器端字符集,而客戶端使用CP936或GB18030字符集。
另外,還有一種選擇是,伺服器端和客戶端都使用iso_1字符集,雖然iso_1字符集並不直接支援中文字元, 但我們將伺服器端和客戶端都設定成iso_1字符集後,系統也不會在客戶端和伺服器端進行字元轉換,它只不過將一個漢字  的兩個位元組當做兩個單獨字元來處理,一般情況下沒有問題。但當執行like匹配查詢的時候,它有可能返回不正確的結果, 原因是伺服器端是根據單位元組去匹配查詢條件的,很可能會有前一個漢字的第二位元組與後一個漢字的第一位元組的內碼組合符合查詢條件,被伺服器端作為查詢結果返回來。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22363020/viewspace-695118/,如需轉載,請註明出處,否則將追究法律責任。

相關文章