实用技巧
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)
里 的 提 示 性 汉 字 显 示 为 乱 码, 即 使 重 新 编 译 以 后 运 行, 提 示 性 汉 字 仍 显 示 为 乱 码。 所 以,
如 果 要 修 改 源 程 序, 还 要 对 其 中 的 汉 字 重 新 改 写。