oracle 乱码 如何解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 乱码 如何解决相关的知识,希望对你有一定的参考价值。

当我insert 进oracle数据库后,发现是乱码,网上说是字符集不对,可是我不知道该怎么改,照网上的改但是没解决问题,所以希望有相同经历的朋友教教我谢谢!

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
参考技术A 这些问题,一般是因为字符集设置不对造成的。

  很久以来,字符集一直是困扰着众多Oracle爱好者的问题,笔者从事Oracle数据库管理和应用已经几年了,经常接到客户的类似上面提到的有关数据库字符集的“告急”和“求救”,在此我们就这个问题做一些分析和探讨。

  首先,我们要明确什么是字符集?字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包括关系,如us7ascii就是zhs16gbk的子集, 从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失,Oracle对这种问题也要求从子集到超集的导出受支持,反之不行。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。

  其次,一旦数据库创建后,数据库的字符集是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集是十分重要的。数据库字符集应该是操作系统本地字符集的一个超集。存取数据库的客户使用的字符集将决定选择哪一个超集,即数据库字符集应该是所有客户字符集的超集。

  在实际应用中,和字符集问题关系最大的恐怕就是exp/imp了。在做exp/imp时,如果Client 和Server的nls_lang设置是一样的,一般就没有问题的。但是,要在两个不同字符集的系统之间导数据就经常会有这样或那样的问题,如,导出时数据库的显示正常,是中文,当导入到其他系统时,就成了乱码,这也是一类常见问题。
参考技术B 你把你插入的SQL语句显示出来看,看下是不是乱码,一般情况下oracle不会发生乱码,很有可能是程序出来问题, 参考技术C select出来的都是乱码的,据说是字符集的问题,我没整明白怎么改

如何解决插入Oracle数据中文为乱码问题

1、首先,Oracle查询编码:select * from v$nls_parameters;//看看是否GBK

 2、如果是用Servlet或者别的,插入数据之前输出一下,看看是否乱码

比如:

doPost()
//设置接受编码,但你的页面也必须是UTF-8
response.setContentType("text/html;charset=UTF-8");
doGet()
//下面方式转一下码
String username = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8");

 

以上是关于oracle 乱码 如何解决的主要内容,如果未能解决你的问题,请参考以下文章

如何解决MSSQL中文数据乱码问题

解决SQLAlchemy MySQL Oracle 中文执行乱码问题

用source语句导入sql文件时中文乱码如何解决

数据库内容正常,取出来特殊字符乱码,如何解决

oracle数据库中编写sql语句后注释中文显示乱码如何解决,但是复制出来就显示中文

如何将存入数据库的乱码还原?