如何正確設置 Informix GLS 及 CSDK 語言環境

本文介紹 GLS 相關知識,說明如何正確設置 Informix GLS 語言環境相關變量(DB_LOCALE,CLIENT_LOCALE),保證 Informix 數據庫服務器、客戶端能正確的支持中文字符和支持使用中文的對象名。說明在 CSDK 2.7 以上版本(當前最新版本爲 CSDK 3.5)中對語言環境設置的要求。以及舉例說明語言環境設置常見錯誤及解決辦法。java

 

概述

IBM Informix 產品能夠支持許多語言、文化和代碼集。全部特定於文化的信息聚集於單個環境中,稱爲 Global Language Support (GLS)語言環境。除了 ASCII 美國英語以外,GLS 容許您在其餘語言環境中工做並在 SQL 數據和標識中使用非 ASCII 字符。可使用 GLS 功能來與特定語言環境定製保持一致。語言環境文件包括特定於文化的信息,如貨幣和日期格式以及整理順序。正則表達式

本文介紹 GLS 相關知識,說明如何正確設置 Informix GLS 語言環境相關變量(DB_LOCALE, CLIENT_LOCALE),保證 Informix 數據庫服務器、客戶端能正確的支持中文字符和支持使用中文的對象名。以及說明在 CSDK 2.7 以上版本(當前最新版本爲 CSDK 3.5)中對語言環境設置的要求。sql

 

GLS 基本概念

字符(Character)是各類文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集(Character set)是多個字符的集合,字符集種類較多,每一個字符集包含的字符個數不一樣,常見字符集名稱:ASCII字符集、GB2312字符集(簡體中文)、BIG5字符集(繁體中文)、 GB18030字符集(亞洲字符集合)、Unicode( 經常使用 UTF-8) 字符集等。數據庫

Informix GLS 語言環境對經常使用的字符集進行了命名及內部編碼(採用 16 進制編碼)管理。經過服務器端的文件:$InformixDIR/gls/cm3/registry 查看 GLS 字符名稱、編碼對照表。示例以下:服務器

 

字符集名稱  編碼  十六進制編碼
 8859-1 819 # 0x0333 
 gb 57357 # 0xe00d 
 GB2312-80 57357 # 0xe00d 
 utf8 57372 # 0xe01c 
 big5 57352 # 0xe008 
 GB18030-2000 5488 # 0x1570

GLS 環境中不一樣字符集名稱可能對應同一個字符集編碼,但一個字符集只能有一個編碼,也就是說字符集編碼纔是惟一的。ui

GLS 環境中按照語言和地區把所支持的字符集分紅不一樣的目錄。$InformixDIR/gls/lc11/ 語言 _ 地區 /,如中文大陸地區的目錄爲:$InformixDIR/gls/lc11/zh_cn/,該目錄下有以下兩個文件:1570.lco e00d.lco ,說明咱們在設置字符集時,咱們可使用 zh_cn.GB18030-2000 zh_cn.gb zh_cn.GB2312-80 三個不一樣的名稱。這裏(zh_cn.gb 與 zh_cn.GB2312-80 對應相同的字符集)。編碼

GLS 環境中不一樣的字符集能夠正確的進行轉換,查看那些字符集能夠正確轉換的方法,查看目錄 $InformixDIR/gls/cv9 目錄下的是否存在指定字符集互相轉換的文件。如該目錄下有文件 e01ce00d.cvo 和 e00de01c.cvo 兩個文件,表示 GLS 經過這兩個轉換文件支持 UTF-8 與 GB 之間的字符轉換。url

Informix 經過 DB_LOCALE 和 CLIENT_LOCALE 來設置數據庫的語言本地化支持設置。DB_LOCALE 和 CLIENT_LOCALE 的值由四部分組成 ( 第 4 部分爲可選 ),字符集不區分大小寫。spa

1          2            3          4 
 < 語言 >_< 國家和地區 >.< 字符集名 / 字符集編碼 >[@modifier]

舉例說明 :操作系統

CLIENT_LOCALE=en_us.8859-1 
 CLIENT_LOCALE=en_us.819 
 # 以上兩個爲同一字符集:819 爲 8859-1 的編碼
 DB_LOCALE=zh_cn.gb

GLS 字符集工做原理

Informix 數據庫服務器端、客戶端字符集的工做原理示意圖見圖 1。

圖 1. IDS GLS 字符集處理過程示意圖

圖 1. IDS GLS 字符集處理過程示意圖

DB_LOCALE 環境變量用途

  1. 在客戶機應用程序和數據庫服務器交換字符數據時,若是 DB_LOCALE 環境變量(在客戶機計算機上)的值與 CLIENT_LOCALE 的值不一樣,客戶機應用程序將執行代碼集轉換。 代碼集轉換防止這兩種代碼集不一樣時發生數據破壞。
  2. 在客戶機應用程序請求鏈接時,它將包括 DB_LOCALE(若是已設置)的信息發送至數據庫服務器。
  3. 在肯定如何設置服務器處理語言環境的數據庫信息時,數據庫服務器使用 DB_LOCALE。
  4. 在客戶機應用程序嘗試打開數據庫時,數據庫服務器將客戶機應用程序傳遞的 DB_LOCALE 環境變量的值與數據庫中存儲的數據庫語言環境進行比較。
  5. 當數據庫服務器存取與語言環境相關的數據類型的列時,數據庫服務器使用 DB_LOCALE 指定的語言環境。
  6. 當數據庫服務器建立新數據庫時,它將檢查數據庫語言環境(DB_LOCALE),以肯定如何在數據庫的系統目錄中存儲字符信息。此信息包括諸如如何處理正則表達式、比較字符串以及確保代碼集的正確使用的操做。

CLIENT_LOCALE 環境變量用途

  1. 在客戶機應用程序和數據庫服務器交換字符數據時,若是 CLIENT_LOCALE 環境變量的代碼集與 DB_LOCALE(在客戶機計算機上)的代碼集不一樣,客戶機應用程序將執行代碼集轉換。代碼集轉換防止這兩種代碼集不一樣時發生數據破壞。
  2. 在客戶機應用程序請求鏈接時,它將包括 CLIENT_LOCALE 的信息發送至數據庫服務器。
  3. 在肯定如何設置服務器處理語言環境的客戶機應用程序信息時,數據庫服務器將使用 CLIENT_LOCALE。
  4. 在 Informix ESQL/C 的預處理器處理源文件時,它接受以 CLIENT_LOCALE 的代碼集編寫的 C 源代碼。 在 Informix ESQL/C 客戶機應用程序執行時,將檢查 CLIENT_LOCALE 以得到客戶機語言環境的名稱,該語言環境將對操做系統文件名、文本文件的內容以及日期、時間和數字數據的格式產生影響。
  5. 在數據庫實用程序建立文件時,文件名和文件內容位於 CLIENT_LOCALE 指定的代碼集中。在查找特定於產品的消息文件時,客戶機應用程序將檢查與客戶機語言環境關聯的消息目錄。

四個語言環境的含義

  1. 客戶機語言環境— Client locale

    客戶機語言環境指定客戶機應用程序用於執行讀和寫(I/O)操做的語言、地域和代碼集。在客戶機應用程序中,I/O 操做包括讀取鍵盤輸入或要發送至數據庫的數據文件,以及將數據庫服務器從數據庫中檢索的數據寫入屏幕、文件或打印機。 經過 CLIENT_LOCALE 來設置客戶機語言環境。

  2. 數據庫語言環境— Database locale

    經過 DB_LOCALE 環境變量設置的數據庫語言環境指定數據庫服務器用於正確解釋特定數據庫中語言環境相關的數據類型(NCHAR 和 NVARCHAR)所需的語言、地域和代碼集。DB_LOCALE 中指定的代碼集肯定哪些字符在任何字符列中都是有效的,而且肯定數據庫對象(如數據庫、表、列和視圖)的名稱。數據庫服務器使用 DB_LOCALE 環境變量指定的數據庫代碼集將數據傳入和傳出數據庫。

  3. 服務器語言環境— Server locale

    數據庫服務器使用 SERVER_LOCALE 環境變量指定的服務器代碼集寫文件(如調試和警告文件)。可是,數據庫服務器不使用服務器語言環境來寫入採用 Informix 專用格式的文件(數據庫和表文件)。

  4. 服務器處理語言環境— Server processing locale

    數據庫服務器使用數據庫語言環境的代碼集做爲服務器處理語言環境的代碼集 , 使用服務器處理語言環境來寫入採用 Informix 專用格式的文件(數據庫和表文件)。也就是說數據庫服務器使用數據庫語言環境(DB_LOCALE)來寫入採用 Informix 專用格式的文件(數據庫和表文件)。

創建數據庫鏈接過程

在客戶機應用程序請求與數據庫的鏈接時,數據庫服務器使用 GLS 語言環境執行如下步驟。

  1. 客戶機應用程序發送語言環境信息到數據庫服務器。
    • CLIENT_LOCALE( 未設置將採用默認 en_us.819);
    • DB_LOCALE( 未設置則不發送 )。
  2. 驗證是否可以在客戶機應用程序及其請求的數據庫之間創建鏈接。

    對好比下兩個語言環境:

    • 由客戶機應用程序發送的 DB_LOCALE 指定的語言環境;
    • 存儲在請求數據庫的系統目錄中的數據庫語言環境。
      • 匹配,則創建鏈接。
      • 不匹配,提示沒法鏈接到數據庫。或者能夠繼續進行這樣的鏈接,可是數據庫服務器可能會不正確地解釋它從客戶機接收到的數據,那麼只能靠本身來理解交換中數據的格式。
  3. 肯定服務器處理語言環境,按以下順序肯定服務器處理語言環境:
    • 使用客戶機定義的 DB_LOCALE;
    • 數據庫語言環境中的環境變量 DB_LOCALE。

執行代碼集轉換

在客戶機 / 服務器環境中,若是客戶機或服務器計算機使用不一樣的代碼集來表示相同的字符,那麼須要將字符數據從一種代碼集轉換爲另外一種代碼集。若是不進行代碼集轉換,那麼一臺計算機沒法正確地處理或顯示源自另外一臺計算機的字符數據(在這兩臺計算機使用不一樣的代碼集時)。

什麼時候執行代碼集轉換

只有在兩個代碼集(客戶機和服務器處理語言環境,或服務器處理語言環境和服務器)不一樣時,應用程序才必須使用代碼集轉換。如下狀況是代碼集不一樣的可能緣由:

  1. 不一樣的操做系統可能以不一樣的方式對同一字符進行編碼。
  2. 若是客戶機語言環境和數據庫語言環境指定不一樣的代碼集,客戶機應用程序將執行代碼集轉換以便服務器計算機不會裝入此類型的處理。
  3. 若是服務器語言環境和服務器處理語言環境指定不一樣的代碼集,數據庫服務器將在寫入和讀取操做系統文件(如日誌文件)時執行代碼集轉換。該轉化不涉及到數據庫數據的問題。

在圖 1 中,黑點表示在客戶機 / 服務器環境中可能發生代碼集轉換的兩個時刻。

客戶機應用程序代碼集轉換

當如下兩個條件都爲真時,客戶機應用程序自動在客戶機和數據庫代碼集之間執行代碼集轉換:

  • 客戶機和數據庫語言環境的代碼集不匹配。
  • 客戶機和數據庫代碼集之間的轉換存在有效的目標代碼集轉換。

客戶機應用程序開始執行時,它會比較客戶機和數據庫語言環境的名稱,以肯定是否執行代碼集轉換。若是設置了 CLIENT_LOCALE 和 DB_LOCALE 環境變量,那麼客戶機應用程序使用這些語言環境名稱來分別肯定客戶機和數據庫的代碼集。若是未設置 CLIENT_LOCALE(且未設置 DBNLS),那麼客戶機應用程序假定客戶機語言環境爲缺省語言環境。若是未設置 DB_LOCALE(且未設置 DBNLS),那麼客戶機應用程序假定數據庫語言環境與客戶機語言環境(CLIENT_LOCALE 設置的值)相同。

若是客戶機和數據庫代碼集相同,那麼無需進行代碼集轉換。可是,若是代碼集不匹配,客戶機應用程序必須肯定這兩個代碼集是否可轉換。若是客戶機能夠找到關聯的代碼集轉換文件,那麼兩個代碼集是可轉換的。這些代碼集轉換文件必須存在於客戶機計算機上。

舉例說明:

客戶機應用程序:CLIENT_LOCALE=en_us.1252 DB_LOCALE=en_us.8859-1 
客戶機應用程序肯定它必須在 Windows 代碼頁 1252(客戶機語言環境中)和 
ISO8859-1 代碼集(數據庫語言環境中)之間執行代碼集轉換。
若連接具備 GB(zh_cn.gb) 語言環境的數據庫,那麼數據庫將設置 SQLWARN 警告,緣由是語言、地區和代碼
集不一樣。客戶機應用程序將不正確地執行代碼集轉換。
它將繼續在 Windows 代碼頁 1252 和 ISO8859-1 之間,而不是在 Windows 代碼頁 1252 和 zh_cn.gb 之間進行
轉換。這種狀況可能會致使數據破壞。應用程序將不會繼續此連接。

設置字符集

Informix 經過 DB_LOCALE 和 CLIENT_LOCALE 來設置數據庫的語言本地化支持設置。

數據庫服務端

在建立數據庫時(爲了統一系統數據庫與應用數據庫的字符集,在建立數據庫實例時),請按以下步驟設置數據庫的 DB_LOCALE 值。

1. 設置環境變量 DB_LOCALE 
 set DB_LOCALE=zh_cn.gb 
 2. 建立數據庫 create database dbname 
 3. 驗證當前數據庫字符集
 SELECT dbs_collate FROM sysmaster:sysdbslocale 
 WHERE dbs_dbsname = ‘ dbname ’

客戶端

當咱們使用 ODBC,JDBC 鏈接數據庫時,咱們須要在鏈接信息中正確設置語言環境變量:DB_LOCALE 和 CLIENT_LOCALE。

設置語言環境變量
 DB_LOCALE=zh_cn.gb 
 CLIENT_LOCALE=zh_cn.gb

ODBC:

下圖爲 WINDOWS 環境下 ODBC 語言環境設置示意圖。

圖 2. 在 ODBC 中設置語言環境

圖 2. 在 ODBC 中設置語言環境

UNIX 環境下須要在 odbc.ini 文件中定義:

在 odbc.ini 文件中定義以下兩項數據庫語言環境變量
 DB_LOCALE=zh_cn.gb 
 CLIENT_LOCALE=zh_cn.gb

JDBC:

在使用 JDBC 鏈接數據庫時,咱們須要在鏈接數據庫的 URL 中設置數據庫語言環境變量:DB_LOCALE 和 CLIENT_LOCALE。示例以下:

String url = "jdbc:Informix-sqli://10.127.1.11:8001/testdb:
 InformixSERVER=servername;user=user;password=password;
 DB_LOCALE=zh_CN.gb;CLIENT_LOCALE=zh_CN.gb";

 

常見字符集設置問題

在 Informix 數據庫字符集設置與使用過程,咱們常會遇到一些字符集相關錯誤,知道了錯誤產生的緣由,就能夠很容易解決問題。這裏咱們總結了幾種常見的字符集設置相關問題。

Error -23101 Unable to load locale categories

當設置的 DB_LOCALE 和 CLIENT_LOCALE 的字符集對應的如下文件不存在時,出現該錯誤。

  • - $InformixDIR/gls/lc11/DB_LOCALE's( 語言 _ 地區 )/(db 的 16 進制編碼 ).lco
  • - $InformixDIR/gls/lc11/CLIENT_LOCALE's( 語言 _ 地區 )/( db 的 16 進制編碼 ).lco
  • - $InformixDIR/gls/lc11/CLIENT_LOCALE's( 語言 _ 地區 )/( client 的 16 進制編碼 ).lco

舉例說明:

DB_LOCALE = en_us.utf8 #(對應的 16 進制編碼爲:e01c)
 CLIENT_LOCALE = zh_cn.gb18030-2000 #(對應的 16 進制編碼爲:1570)
 如下 3 個文件必須存在,缺任意文件將報 Error -23101。
  - $InformixDIR/gls/lc11/en_us/e01c.lco 
  - $InformixDIR/gls/lc11/zh_cn/e01c.lco 
  - $InformixDIR/gls/lc11/zh_cn/1570.lco

Error -23104 Error opening required code-set conversion object file

當設置的 DB_LOCALE 和 CLIENT_LOCALE 的字符集對應的如下轉換文件不存在時,會出現該錯誤。固然只有當 DB_LOCALE 和 CLIENT_LOCALE 的字符集不一致時纔會須要轉換,若是一致則不會出現 -23104 錯誤。

- $InformixDIR/gls/cv9/ccccdddd.cvo 
 - $InformixDIR/gls/cv9/ddddcccc.cvo

其中:cccc 爲 CLIENT_LOCALE 字符集編碼對應的 16 進制值

dddd 爲 DB_LOCALE 字符集編碼對應的 16 進制值

舉例說明:

DB_LOCALE = en_us.utf8 #(對應的 16 進制編碼爲:e01c)
 CLIENT_LOCALE = zh_cn.gb18030-2000 #(對應的 16 進制編碼爲:1570)
 如下 2 個文件必須存在,缺任意文件將報 Error -23104。
  - $INFOMRIXDIR/gls/cv9/e01c1570.cvo 
  - $INFOMRIXDIR/gls/cv9/1570e01c.cvo

Error -23197 Database locale information mismatch

當出現以下狀況時,出現 -23197 錯誤。

  1. 定義的 DB_LOCALE 值與數據庫的使用的值(數據庫建立時使用的 DB_LOCALE 值)不一致;
  2. 經過 SET COLLATION 語句定義 DB_LOCALE 值與數據庫的使用值不一致 ;

舉例說明:

數據庫的 LOCALE= en_us.8859-1 
 能夠經過以下 SQL 讀取當前數據庫的 LOCALE 值
 SELECT dbs_collate FROM sysmaster:sysdbslocale WHERE dbs_dbsname = ‘ dbname ’ 
 客戶端 DB_LOCALE 設置以下(注意:若是沒有設置 DB_LOCALE,將使用在服務器計算機上設置的 DB_LOCALE),則會出現 -23197 錯誤DB_LOCALE = zh_cn.gb

Error -201,-202 數據庫提示語法錯誤

Error -201,-202 數據庫提示語法錯誤,不支持中文對象名,如中文表名、字段別名、視圖名。該類錯誤提示緣由是當前數據庫的 DB_LOCALE 設置問題。

若是數據庫的 DB_LOCALE 設置爲 zh_cn.GB18030-2000,則數據庫就能夠支持中文對象名。

舉例說明:

DB_LOCALE = zh_cn.GB18030-2000 的數據庫,能夠支持以下中文對象名,不然將提示語法錯誤。
 Select c1 第一列 from test_cn; 
 Create table 中文表名 (c1 integer, 中文列名 integer); 
 drop table 中文表名 ; 
 若相似 SQL 不能運行,請覈查數據庫的 DB_LOCALE 值。
 SELECT dbs_collate FROM sysmaster:sysdbslocale WHERE dbs_dbsname = 'dbname'

亂碼問題

Informix 字符出現亂碼問題,或者不能正確顯示中文字符。問題的緣由是客戶端 CLIENT_LOCALE 設置的值與 DB_LOCALE 值不一致,並且二者對應的字符集之間不能正確進行轉換。須要從新設置 CLIENT_LOCALE 與 DB_LOCALE 的值,確保二者一致或者能夠正確相互轉換。

時間格式問題

Informix 數據庫的時間格式由數據庫服務器端環境變量 GL_DATE GL_DATETIME 控制,默認的字符集下默認的時間格式爲:

GL_DATE="%m/%d/%iy" 
 DATETIME="%iY-%m-%d %H:%M:%S"

可是,當咱們設置了 DB_LOCALE 爲 zh_cn.gb 的情形下,而沒有設置 GL_DATE,DATETIME,則時間格式會採用 CLIENT_LOCALE 的值,在 zh_cn.gb 狀況下,會出現:「2009 年 10 月 2 日」的日期格式,若是咱們以前系統採用默認的時間格式的狀況下,就會出現時間格式不匹配的錯誤。若是咱們仍然須要採用默認的時間格式,咱們須要在數據庫服務端修改時間格式環境變量便可:

GL_DATE="%m/%d/%iy" 
 DATETIME="%iY-%m-%d %H:%M:%S"

 

GLS 對 CSDK 版本要求

CSDK2.8 及以上版本中(目前最新版本爲 CSDK3.5),爲了正確支持語言文字的處理,Informix GLS 語言環境下要求正確設置數據庫服務器語言環境及客戶端語言環境。在中文語言環境下,咱們應該按以下要求設置服務器端和客戶端語言環境。

數據庫服務端:

在建立數據庫時(爲了統一系統數據庫與應用數據庫的字符集,在建立數據庫實例時),請按以下步驟設置數據庫的 DB_LOCALE 值。

1. 設置環境變量 DB_LOCALE 
 set DB_LOCALE=zh_cn.GB18030-2000 
 2. 建立數據庫 create database dbname 
 3. 驗證當前數據庫字符集
 SELECT dbs_collate FROM sysmaster:sysdbslocale 
 WHERE dbs_dbsname = 'dbname'

客戶端:

當咱們使用 ODBC,JDBC 鏈接數據庫時,咱們須要在鏈接信息中正確設置語言環境變量:DB_LOCALE 和 CLIENT_LOCALE。

設置語言環境變量
 DB_LOCALE=zh_cn.GB18030-2000 
 CLIENT_LOCALE=zh_cn.GB18030-2000

數據庫不可以脫離字符集獨立存在,它必定屬於某種字符集。

CSDK2.7 版本,IDS 默認狀況下使用 Garbage In, Garbage Out 模式處理中文字符,若數據庫服務器上的 DB_LOCALE 採用默認的 en_us.8859-1 字符集,可以正常支持中文字符。可是升級到 CSDK2.8 及以上版本時,再也不支持 Garbage In, Garbage Out 模式,將出現亂碼問題。iso-8859_1字符集的數據庫只支持單字節。雖然能夠往裏面保存多字節的數據,可是數據庫自己只是簡單的認爲這些數據只是單字節的數據。不管你存入的是雙字節的中文,仍是4字節的unicode數據,數據庫自己只是把它當爲單字節而已。

 

客戶端經過jdbc鏈接上數據庫,並提取數據後,數據按照數據庫默認的編碼方式被提取到客戶端。客戶端要將其轉換成unicode。由於jdbc是基於java的,而java內部所有是unicode編碼。那麼在客戶端進行轉換的時候,就有問題了,到底按哪一種格式轉?

若是保存在數據庫中的數據都是iso-8859_1中包含的字符,那麼這樣操做沒錯。可是若是是數據中有中文,那麼這樣操做就錯了。

例如,漢字「中文」的ascii碼爲0xD6 0xD0 0xCE 0xC4,而經常使用的漢字codeset爲cp936。若是按照cp936轉unicode,則轉換的結果是0xE4 0xB8 0xAD 0xE6 0x96 0x87;若是按照iso-8859_1轉換則結果是0xC3 0x96 0xC3 0x90 0xC3 0x8E 0xC3 0x84.

你看,一樣的數據,就是由於指定不一樣的原始字符集,致使轉換成unicode的時候,結果大相徑庭。因此在用jdbc鏈接數據庫的時候,有必要把這個轉換關係給說清楚。

在informix jdbc中是經過newcodeset來講明問題的。

在這裏,咱們就要說清楚,數據庫是按什麼字符集存放數據的,取到客戶端java時,這些數據須要按照什麼樣的字符集轉換成unicode。

再或者更改數據庫的字符集(設置 DB_LOCALE=zh_cn.GB18030-2000,從新建立數據庫),而後按本文中描述的方法進行 DB_LOCALE 與 CLIENT_LOCALE 的設置方法進行處理。若在實際環境下重建數據庫成本過高,能夠考慮以下步驟進行解決 ODBC 支持中文的問題。

複製代碼

數據庫服務器端:
 1. 設置環境變量: IFMX_UNDOC_B168163=1 
 2. 將 en_us.8859-1 字符集文件拷貝到 zh_cn 目錄下
     cd $INFORMIXDIR/gls/lc11 
     cp ./en_us/0333.lco ./zh_cn 
 3. 從新啓動 IDS 
客戶端:
設置語言環境:
     l DB_LOCALE=zh_cn.GB18030-2000 
     l CLIENT_LOCALE=zh_cn.GB18030-2000

對於 JDBC 咱們能夠經過 NEWCODESET 來解決該問題:

  newcodeset的格式以下:
  newcodeset=jdk codeset, ifx codeset,ifx codenum

  jdbc的URL連接信息以下:

  URLString = "jdbc:Informix-sqli://9.125.66.130:6346/dbname:InformixSERVER=servername; NEWCODESET=GB18030-2000,8859-1,819; CLIENT_LOCALE=en_US.8859-1; DB_LOCALE=en_US.8859-1;"

總結

在簡體中文應用環境下,請使用 zh_cn.GB18030-2000 字符集,在須要 unicode 的應用環境下,能夠採用 en_us.utf8 字符集。

舉例說明:採用 zh_cn.GB18030-2000字符集

數據庫服務器端:
在建立數據庫實例前,設置環境變量
 DB_LOCALE=zh_cn.GB18030-2000 
 CLIENT_LOCALE=zh_cn.GB18030-2000 
建立數據庫
數據庫客戶端端:
須要在 setnet3二、ODBC、JDBC 鏈接中配置
 DB_LOCALE=zh_cn.GB18030-2000 
 CLIENT_LOCALE=zh_cn.GB18030-2000

舉例說明:採用 utf8字符集

數據庫服務器端:
在建立數據庫實例前,設置環境變量
 DB_LOCALE=en_us.utf8 
 CLIENT_LOCALE= en_us.utf8 
建立數據庫
數據庫客戶端端:
須要在 setnet3二、ODBC、JDBC 鏈接中配置
 DB_LOCALE= en_us.utf8 
 CLIENT_LOCALE= en_us.utf8

特別注意,在安裝數據庫前請設置好環境變量 DB_LOCALE 爲規劃的字符集,由於數據庫一旦建立就不能修改其字符集,除非從新建立。在默認狀況下將採用 en_us.8859-1。

相關文章
相關標籤/搜索