博客
关于我
oracle字符集
阅读量:795 次
发布时间:2023-02-25

本文共 1781 字,大约阅读时间需要 5 分钟。

Oracle 服务器端字符集与dmp文件字符集

1. 什么是字符集?

字符集是一个字节数据的解释符号集合,具有大小之分,且有相互的包容关系。Oracle支持国家语言的体系结构,允许使用本地化语言存储、处理和检索数据。它使工具、错误消息、排序顺序、日期、时间、货币、数字和日历自动适应本地化语言和平台。

数据库字符集的最重要参数是NLS_LANG,它的格式为:NLS_LANG = language_territory.charset。其中language指定服务器消息的语言,territory指定日期和数字格式,charset指定字符集。例如:AMERICAN_AMERICA.US7ASCII。

数据库字符集在创建时通常不能更改,但可以通过以下方法进行修改:导出数据,重建数据库,再导入数据。


2. EXP/IMP 与字符集

EXP/IMP 是Oracle的数据迁移工具。Export将数据输出到操作系统文件,Import将文件读入数据库。在迁移过程中,涉及四个环节的字符集转换:

  • 源数据库字符集
  • Export过程中用户会话字符集(通过NLS_LANG设定)
  • Import过程中用户会话字符集(通过NLS_LANG设定)
  • 目标数据库字符集
  • 如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,导致数据丢失。例如,若源数据库使用ZHS16GBK,而Export用户会话使用US7ASCII,中文字符无法找到对应字符,导致丢失。


    3. 查看数据库字符集

    在数据导入时,需确保三个字符集一致:Oracle服务器端字符集、客户端字符集和dmp文件字符集。

    3.1 查询Oracle服务器端字符集

    可以通过以下SQL查询Oracle服务器端字符集:

    SQL> select userenv('language') from dual;

    返回值例如:SIMPLIFIED CHINESE_CHINA.ZHS16GBK。

    3.2 查询dmp文件字符集

    dmp文件的第2和第3个字节记录字符集信息。例如,0354对应ZHS16GBK。可以通过以下SQL查询:

    SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;

    返回值为:ZHS16GBK。

    3.3 查询客户端字符集

    在Windows平台下,查询注册表HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME\NLS_LANG。可以通过以下命令查询环境变量:

    echo $NLS_LANG

    返回值例如:AMERICAN_AMERICA.ZHS16GBK。


    4. 修改Oracle服务器端字符集

    数据库字符集在创建后通常不能更改,但可以通过以下方法修改:

  • 导出数据,重建数据库,再导入数据。
  • 使用ALTER DATABASE CHARACTER SET语句修改字符集,前提是新字符集是当前字符集的超集。例如,修改为UTF8。

  • 5. 修改dmp文件字符集

    dmp文件的字符集可以直接修改其第2和第3个字节。例如,修改为ZHS16GBK,可以通过以下步骤:

  • 使用SQL查询字符集代码:
  • SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;

    返回值为:0354。

    1. 使用文本编辑器(如UltraEdit)修改dmp文件的第2和第3个字节为0354。

    2. 6. 客户端字符集设置方法

      6.1 UNIX环境

      编辑用户 profil.e file:

      $ NLS_LANG=“simplified chinese”_china.zhs16gbk
      $ export NLS_LANG

      6.2 Windows环境

      通过注册表修改:

      Regedit.exe ---》HKEY_LOCAL_MACHINE ---》SOFTWARE ---》Oracle-HOME ---》NLS_LANG

      设置值为:AMERICAN_AMERICA.ZHS16GBK。

      6.3 DOS窗口

      在DOS窗口中设置:

      set nls_lang=AMERICAN_AMERICA.ZHS16GBK

      6.4 UNIX环境查询

      通过echo命令查询:

      echo $NLS_LANG

    转载地址:http://lmpfk.baihongyu.com/

    你可能感兴趣的文章