重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一般来说,oracle数据导出spool方式,中文出现乱码,这情况是因为数据库服务器和客户端字符集不匹配,执行sqlplus的机器就是客户端,服务器和客户端也可能是一台机器,执行sqlplus之前要先设置客户端的字符集,在linux上:export NLS_LANG=.......
成都创新互联主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务泽普,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
在windows上set NLS_LANG查询数据库字符集:select property_value from database_properties where property_name like 'NLS_CHAR%';
1、比如查询结果是:ZHS16GBK
那你在sqlplus之前要设置:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
然后再登录sqlplus用spool生成数据
检查下你导出时候的环境变量,导入时的环境变量
2、比如导出时NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
导入时NLS_LANG没有设置,或者设置为其他字符集,则导入的库内汉字就有可能变成乱码。
解决方法,连接数据库的时候设置正确字符集即可。
1、对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
2、去掉注释符#,同时将其修改为
SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3、对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为
SQLPLUS_SYSTEMROOT=d:\\WINNT。
对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
4、修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。
问题: 使用Oracle Instant Client 出现 ORA-12705: Cannot access NLS data files or invalid environment specified 错误。
如果是Windows平台,注册表里 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 查找键 NLS_LANG,这个键由Oracle标准客户端安装创建, 值是 NA 。这个导致了 ORA-12705错误。解决方法就是改名 NLS_LANG。
Linux下 如果环境变量 NLS_LANG 值是NA 会引起 ORA-12705 错误,解决方法是删除这个变量
unset NLS_LANG
可能是字符集不一致造成的,字符集有数据库字符集和客户端字符集,对你这种情况来说,导出和导入都要涉及,也就是说你要保证4个字符集都一致才行
exp时源数据库字符集,客户端字符集
imp时目标数据库字符集和客户端字符集
如果你就在数据库服务器上导出或者导入,那么你这机器既作为数据库服务器也做导入导出客户端
字符集的问题
如果是应用应用服务器连接的数据库,查看和修改应用服务器的字符集与oracle数据库字符集是否一致。
如果是通过oracle客户端(包括pl/sql developer )等连接的数据库,查看和修改该客户端使用的oraclehome的字符集设置,一般在注册表中。具体根据使用的oracle客户端查找。
应该是你倒出或者是倒入时用错了客户端的字符集,或者是源库和目标库的字符集本身就不兼容
分别在源库和目标库查询一下数据库字符集:
select value$ from props$ where name like 'NLS_CHAR%';
看它们是否一致,如果不一致,基本上你就不能用导入的方法来在这两库之间迁移这个数据
如果一致,再检查一下导出和导入所用机器的字符集(客户端字符集),windows要看注册表,UNIX要看操作系统用户的环境变量
1,修改Oralce的编码格式
2,修改主机的编码格式
3,查看自己导入的数据是否已经乱码