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

解决方案 »

  1.   

    Worksheet是个该扔的东西,换别的吧
      

  2.   

    方案一不行,我的Windows安装目录下没有oracle.ini,以o开头的文件里都没有[Oracle]节或者  NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1    
      

  3.   

    对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
    # SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
    去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
    对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。
    对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:
    ORA-12560 TNS:protocol adapter error 
    或者 
    ORA-12545 Connect failed because target host or object does not exist 
    修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。
      

  4.   

    用9I 把,9i 的worksheet 没有这个问题
      

  5.   

    算了
    我重装了中文版的XP,在装ORACLE的时候默认字符集是中文的,也没有乱码的问题
    以后不随便玩英文的系统和开发软件了