Oracle 和Developer/2000 字 符 集 的 選 擇 和 改 變
---- 一、 字 符 集 的 選 擇
---- 在Oracle 客 戶 機/ 服 務 器 應 用 中, 前 端 開 發 工 具Developer/2000 應 和Oracle 數 據 庫 選 擇 相 同 的 字 符 集, 否 則Developer/2000 不 能 正 確 處 理 漢 字, 如 不 能 輸 入 漢 字、 漢 字 顯 示 亂 碼 等。 要 正 確 處 理 漢 字, 一 般 有 兩 種 方 案 可 供 選 擇:
---- 方 案 一: 使 用US7ASCII 字 符 集。
---- 在 創 建Oracle 數 據 庫 時, 字 符 集 選 擇US7ASCII, 在 安 裝Developer/2000 時, 語 言 選 擇English, 安 裝 完 成 後,Developer/2000 缺 省 的 字 符 集 不 是US7ASCII, 應 將windows 目 錄 下 的oracle.ini 文 件 中[Oracle] 節 裡 的
---- NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
---- 修 改 為
---- NLS_LANG=AMERICAN_AMERICA.US7ASCII
---- 方 案 二: 使 用ZHS16CGB231280 字 符 集。
---- 在 創 建Oracle 數 據 庫 時, 字 符 集 選 擇ZHS16CGB231280。 在 安 裝Developer/2000 時, 語 言 相 應 地 選 擇Simplified Chinese, 其 缺 省 的 字 符 集 為ZHS16CGB231280。
---- 如 果 採 用 方 案 一, 一 個 漢 字 相 當 於 兩 個 字 符。 例 如" 一 個 漢 字" 的 長 度 是8,substr(' 一 個 漢 字',1,2) 的 結 果 為" 一"。 如 果 採 用 方 案 二, 一 個 漢 字 相 當 於 一 個 字 符。 例 如" 一 個 漢 字" 的 長 度 是4,substr('1 個 漢 字',1,2) 的 結 果 為" 一 個"。
---- 在 客 戶 端, 方 案 一 能 正 常 顯 示 庫 中 的 漢 字, 但 在 錄 入 單 個 漢 字 時 有 時 需 要 加 空 格, 錄 入 詞 組 時 有 時 會 顯 示 亂 碼; 方 案 二 能 正 常 處 理 漢 字, 包 括 正 確 顯 示 和 錄 入 漢 字。
---- 二、 字 符 集 的 改 變
---- 1.Oracle 數 據 庫 字 符 集 的 改 變
---- Oracle 數 據 庫 的 字 符 集 是 在 安 裝 數 據 庫 時 選 定 的, 一 旦 數 據 庫 創 建 之 後, 數 據 庫 的 字 符 集 是 不 能 改 變 的, 如 果 要 改 變 數 據 庫 的 字 符 集, 只 有 重 新 創 建 數 據 庫。 如 果 要 在 使 原 數 據 庫 中 數 據 保 持 不 變 的 前 提 下 改 變 字 符 集, 則 可 以 參 考 以 下 方 法:
---- 1) 關 閉Oracle, 物 理 備 份Oracle 系 統。
---- 2) 啟 動Oracle, 修 改sys 的 表props$, 把name='NLS_CHARACTERSET' 行 的values$ 設 置 為 新 的 字 符 集。 例 如
---- update props$ set value$='ZHS16CGB231280' where name='NLS_CHARACTERSET';
---- 3) 設 置 環 境 變 量NLS_LANG。 例 如
---- NLS_LANG =AMERICAN_AMERICA. ZHS16CGB231280
---- 4) 用EXP 做 全 部 數 據 庫 備 份。
---- 5) 關 閉Oracle。
---- 6) 重 新 創 建 數 據 庫。
---- 7) 用IMP 做 全 部 數 據 庫 恢 復。
---- 8) 如 果 由 於 各 種 原 因 不 成 功, 可 以 使 用 第 一 步 的 物 理 備 份 恢 復 原 始 數 據 庫。
---- 2.Developer/2000 字 符 集 的 改 變
---- Developer/2000 安 裝 後, 可 以 通 過 修 改 文 件oracle.ini 修 改 字 符 集, 修 改 方 法 可 參 考 方 案 一。
---- Developer/2000 的 字 符 集 改 變 以 後, 原 來 編 譯 好 的 文 件( 如*.fmx) 可 以 正 常 運 行, 但 源 文 件( 如*.fmb) 裡 的 提 示 性 漢 字 顯 示 為 亂 碼, 即 使 重 新 編 譯 以 後 運 行, 提 示 性 漢 字 仍 顯 示 為 亂 碼。 所 以, 如 果 要 修 改 源 程 序, 還 要 對 其 中 的 漢 字 重 新 改 寫。