Oracle数据库从Linux导出,然后在Win2000下导入,数据库中中文字段都显示???。
刚开始导入时提示错误:不支持要求的字符集转换(从类型1到852)
我在网上查了一下,说是Oracle字符集的问题,我也按照很多方法处理过,最后嫩能够导入了,但是查询出来,中文字段都显示???,请各位大侠指点,谢谢!
刚开始导入时提示错误:不支持要求的字符集转换(从类型1到852)
我在网上查了一下,说是Oracle字符集的问题,我也按照很多方法处理过,最后嫩能够导入了,但是查询出来,中文字段都显示???,请各位大侠指点,谢谢!
解决方案 »
- oacle 的for循环, 运行时有个错误 求解!跪求
- 关于随机时间 插入的问题。
- 新手拜山,想了解下用SQL如何获得时区信息后转换成数字类型的
- 提问,支持数据库多帐套?
- DBMS_SCHEDULER.create_program调用错误
- 关于ORACLE不支持某些罕见汉字的问题.求帮助...
- 监听程序当前无法识别连接描述符中所给出的sid,services进程只有一个
- jsp连接oracle,报这个错误:the network adapter could no establish the connection
- 关于时间转化函数的问题。。。。
- 触发器如何书写,关于新增数据的导入导出?
- 关于oracle9i jdevelop 和eclipse 的问题
- 请教高手
$sql>select value$ from sys.props$ where name like 'NLS_CHAR%';exp导出数据windows通过FTP得到文件
FTP>bin --传输类型
FTP>mget 文件名 --获得文件名修改windows数据库字符级与Linux一直运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择
SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器
端 相 同 的 字 符 集(如:AMERICAN_AMERICAN.US7ASCII)。修改数据库字符级
sql>conn /as sysdba
sql>update sys.props$ set value$='US7ASCII' WHERE NAME LIKE 'NLS_CHAR%';
sql>commit;
sql>shutdown immediate
sql>startup
然后进行IMP操作,
虽然用update sys.props$有点危险,但也能解决问题
PARAMETER--------------------- VALUE------------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY RMB
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY RMB
NLS_NCHAR_CHARACTERSET US7ASCII
NLS_COMP BINARY
我的新建的数据库原始的编码都是ZHS16GBK,导入时就报 不支持要求的字符集转换(从类型1到852),如果修改Windows编码,则导入后时???,如果把dmp文件第2、3字节修改成0354,则能导入,但是也是???,请高手指点,谢谢!
昨天晚上试了好几种方法,Oracle也重新安装了,还是不行,各位帮我看看我应该在建立数据库时怎么设置语言编码?
2.可以通过强制更改字符集来使导入数据不现实乱码,不建议这样做还是以1的做法为准
1. 首先查询你的数据库字符集
SQL> SELECT *
2 FROM V$NLS_PARAMETERS
3 WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');PARAMETER VALUE
------------------------------ -----------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET UTF82.如果数据库字符集设置没问题,建议你直接用Windows上的Oracle客户端导出来,再用同一个客户端导到库里,应该就可以了,否则你需要重新建库设置好字符集,再行按上述方法导出导入.
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK 从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
结果类似如下:AMERICAN _ AMERICA. ZHS16GBK 2、如何查询dmp文件的字符集 用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:CODE:SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):CODE:cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。 3、查询oracle client端的字符集 这个比较简单。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:CODE:set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。 在unix平台下,就是环境变量NLS_LANG。CODE:$echo $NLS_LANGAMERICAN_AMERICA.ZHS16GBK
如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
我从Linux导出的信息如下:
PARAMETER--------------------- VALUE------------------------------------
NLS_LANGUAGESIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY RMB
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_CHARACTERSET ZHS16GBK
NLS_SORTBINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:TZM
NLS_DUAL_CURRENCY RMB
NLS_NCHAR_CHARACTERSET US7ASCII
NLS_COMPBINARY
但是导入时提示 不支持要求的字符集转换(从类型1到852),但是我的windows下的Oracle设置结果同上面完全相同。如果修改dmp文件的第2、3字节改称0354,则可以导入,但是还是乱码,这种情况怎么办?