exp/imp 字符集问题 急救!

zouly 2004-05-13 12:10:49
数据库环境:linux+oracle8.1.7
telenet 数据库服务器后用exp命令备份了一张表,
后来为了恢复该表备份的数据,先drop 该表,再telenet 到服务器,用imp命令将数据恢复,但发线备份后的数据中,文字部分出现???,不能正常先显示了。

执行imp命令后先出现以下提示:
import done in US7ASCII character set and US7ASCII NCHAR character set
import server uses ZHS16GBK character set (possible charset conversion)
不只是什么意思?请高手帮助!
怎样恢复才能让中文正常显示?
...全文
94 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
softrookie 2004-06-17
  • 打赏
  • 举报
回复
试试:
用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成WE8ISO8859P1,则需要用NLS_CHARSET_ID获取该字符集的编号:
SQL> select nls_charset_id('ZHS16GBK') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
把852转换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从US7ASCII到ZHS16GBK的转化,这样,再把该dmp文件导入到ZHS16GBK'字符集的数据库就可以了。
注意,十进制与十六进制之间的转换,想明白其中的道理。
查十六进制:select to_char('852','XXXX') from dual;
TO_CH
------
354

czrain 2004-05-13
  • 打赏
  • 举报
回复
现在服务器上用ENV命令看看你的NLS_LANG

看看你ORACLE中的设置的字符集是不是跟它一样

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧