一 进入$ORACLE_HOME/nls/可以看到有如下四个目录
csscan data lbuilder mesg
进入lbuilder目录,启动lbuilder,打开字符集文件(按对象名打开)。这里以AL32 utf-8为例说明。打开 lx20369.nlb文件。查找“成”字,oxe68890
SQL> select dump('成') from dual;
DUMP('成')
-------------------------
Typ=96 Len=3: 230,136,144
查找这个字的16进程编码
SQL> select to_char(230,'xx')||to_char(136,'xx')||to_char(144,'xx') from dual;
TO_CHAR(230,'XX')||TO_CHAR(136
------------------------------
e6 88 90
和lbuilder打开的是一样的。
SQL> select to_number('e68890','xxxxxxxx') from dual;
TO_NUMBER('E68890','XXXXXXXX')
------------------------------
15108240
SQL> select chr(15108240) from dual;
CHR(15108240)
-------------
成
二 oracle 的字符编码命名
<language>.<bit size>.<encoding>
eg:zhs 16 gbk
AL 32 utf8 --al 代表all ,32代表32位
说明一下utf8应当为al24utf8,但习惯命名为utf8,所以,al32utf8是utf8的超级。
这里面用lbuilder打开是一样的:
SQL> select nls_charset_id('UTF8') from dual;
NLS_CHARSET_ID('UTF8')
----------------------
871
SQL> select nls_charset_id('AL32UTF8') from dual;
NLS_CHARSET_ID('AL32UTF8')
--------------------------
873
SQL> select nls_charset_name(873) from dual;
NLS_CHARSET_NAME(873)
---------------------
AL32UTF8
三 修改字符集,不怕死的改props$
四 查看dmp文件格式
linux 下:cat 2011.dmp|od -x|head
配合:
select nls_charset_id(value) nls_charset_id,value nls_charset_name,to_char(nls_charset_id(value),'xxxx') hexid
from v$nls_valid_values where parameter='CHARACTERSET';
得出:
871 UTF8 367
可以判断dmp文件是从什么环境导出来的