本文共 1781 字,大约阅读时间需要 5 分钟。
字符集是一个字节数据的解释符号集合,具有大小之分,且有相互的包容关系。Oracle支持国家语言的体系结构,允许使用本地化语言存储、处理和检索数据。它使工具、错误消息、排序顺序、日期、时间、货币、数字和日历自动适应本地化语言和平台。
数据库字符集的最重要参数是NLS_LANG,它的格式为:NLS_LANG = language_territory.charset。其中language指定服务器消息的语言,territory指定日期和数字格式,charset指定字符集。例如:AMERICAN_AMERICA.US7ASCII。
数据库字符集在创建时通常不能更改,但可以通过以下方法进行修改:导出数据,重建数据库,再导入数据。
EXP/IMP 是Oracle的数据迁移工具。Export将数据输出到操作系统文件,Import将文件读入数据库。在迁移过程中,涉及四个环节的字符集转换:
如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,导致数据丢失。例如,若源数据库使用ZHS16GBK,而Export用户会话使用US7ASCII,中文字符无法找到对应字符,导致丢失。
在数据导入时,需确保三个字符集一致:Oracle服务器端字符集、客户端字符集和dmp文件字符集。
可以通过以下SQL查询Oracle服务器端字符集:
SQL> select userenv('language') from dual; 返回值例如:SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
dmp文件的第2和第3个字节记录字符集信息。例如,0354对应ZHS16GBK。可以通过以下SQL查询:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual; 返回值为:ZHS16GBK。
在Windows平台下,查询注册表HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME\NLS_LANG。可以通过以下命令查询环境变量:
echo $NLS_LANG
返回值例如:AMERICAN_AMERICA.ZHS16GBK。
数据库字符集在创建后通常不能更改,但可以通过以下方法修改:
dmp文件的字符集可以直接修改其第2和第3个字节。例如,修改为ZHS16GBK,可以通过以下步骤:
SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual; 返回值为:0354。
编辑用户 profil.e file:
$ NLS_LANG=“simplified chinese”_china.zhs16gbk$ export NLS_LANG
通过注册表修改:
Regedit.exe ---》HKEY_LOCAL_MACHINE ---》SOFTWARE ---》Oracle-HOME ---》NLS_LANG
设置值为:AMERICAN_AMERICA.ZHS16GBK。
在DOS窗口中设置:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
通过echo命令查询:
echo $NLS_LANG
转载地址:http://lmpfk.baihongyu.com/