关于数据库导入导出的字符集问题

时间:2022-09-20 07:47:36
我要导入一个dmp文件,导入时提示

导出客户机使用 US7ASCII 字符集 (可能的字符集转换)
导出服务器使用 UTF8 NCHAR 字符集 (可能的 ncharset 转换)

US7ASCII 是UTF8 的子集吧,这种情况下这个dmp文件已经产生数据丢失了吧,我怎么弄中文都是乱码了吧。

3 个解决方案

#1



看下imp 日志是怎么说的? 

检查2个数据库的字符集看看.. 

SQL>select userenv(‘language’) from dual; 
AMERICAN _ AMERICA. ZHS16GBK 


可以参考下blog:

Oracle 字符集的查看和修改
http://blog.csdn.net/tianlesoftware/archive/2009/12/02/4915223.aspx






------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716 

#2


导入的时候,dmp文件只要是导入服务端字符集的子集就没问题.
但是如果从服务器导出时,客户端与服务端字符集不兼容的话,那么dmp文件就已经是乱码了,再导入肯定是乱码.

#3


1. 按正常方法把原数据库实例的用户数据导出到一个文件中;
2. 使用SQLPLUS连接到目的数据库实例;
3. 使用select * from V$NLS_PARAMETERS查看当前数据库实例的字符集;
4. 断开连接;
5. 修改oracle客户端的注册表中的字符集为原数据库实例的字符集(SIMPLIFIED CHINESE_CHINA.ZHS16GBK);
6. 连接到目的数据库实例;
7. 使用create database character set 原数据库实例的字符集(ZHS16GBK);
8. 开始导入数据到目的数据库实例的用户中;
9. 使用create database character set “目的数据库实例的字符集(US7ASCII)”;
10.修改oracle客户端的注册表中的字符集为目的数据库实例的字符集(AMERICAN_AMERICA.US7ASCII);

#1



看下imp 日志是怎么说的? 

检查2个数据库的字符集看看.. 

SQL>select userenv(‘language’) from dual; 
AMERICAN _ AMERICA. ZHS16GBK 


可以参考下blog:

Oracle 字符集的查看和修改
http://blog.csdn.net/tianlesoftware/archive/2009/12/02/4915223.aspx






------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716 

#2


导入的时候,dmp文件只要是导入服务端字符集的子集就没问题.
但是如果从服务器导出时,客户端与服务端字符集不兼容的话,那么dmp文件就已经是乱码了,再导入肯定是乱码.

#3


1. 按正常方法把原数据库实例的用户数据导出到一个文件中;
2. 使用SQLPLUS连接到目的数据库实例;
3. 使用select * from V$NLS_PARAMETERS查看当前数据库实例的字符集;
4. 断开连接;
5. 修改oracle客户端的注册表中的字符集为原数据库实例的字符集(SIMPLIFIED CHINESE_CHINA.ZHS16GBK);
6. 连接到目的数据库实例;
7. 使用create database character set 原数据库实例的字符集(ZHS16GBK);
8. 开始导入数据到目的数据库实例的用户中;
9. 使用create database character set “目的数据库实例的字符集(US7ASCII)”;
10.修改oracle客户端的注册表中的字符集为目的数据库实例的字符集(AMERICAN_AMERICA.US7ASCII);