已经非常纠结了,搞了一星期了,始终解决不了这个乱码问题。
服务器环境是redhat linux 5,oracle 11g,就在这台服务器上写了perl以及C++程序入库中文,都是乱码,只要是中文入库就是乱码。
服务器的字符集是SIMPLIFIED CHINESE_CHINA.AL32UTF8,相关的配置如下:
SQL> select userenv('language') from dual;  USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8客户端的NLS_LANG也配置了,和服务器端一样。用perl访问:
连接这样:
my $dbh=DBI->connect("dbi:Oracle:".$tnsname, $user, $passwd,{ora_charset=>'AL32UTF8'});直接赋值$ip_location = "中国";
入库这个字段是乱码。用C++访问:
string struser("user");
string strpwd("passwd");
string strconn_string("ip:1521/orcl");
env = Environment::createEnvironment(Environment::OBJECT);
conn = env->createConnection(struser, strpwd, strconn_string);
入库乱码。受不了了,不知道是哪里的问题。
服务器端locale如下:
[oracle@core02 relaylogora]$ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
看不出哪里有问题。各位大侠谁知道的指点一下,实在是搞不定了。oraclelinux乱码 中文 perl

解决方案 »

  1.   

    补充一下,我运行程序就是在这个服务器运行的,也就是说这个服务器既充当服务端也是客户端。
    我用PC连这台服务器,用plsql和winsql(ODBC方式连接服务器),直接用insert的sql语句入库,中文是正常的,也就是说oracle服务端的语言环境应该没有问题,就是在这台服务器上跑程序入库不对,不知道是哪里的问题。
      

  2.   

    兄弟啊,怎么这么配啊!SIMPLIFIED CHINESE_CHINA.AL32UTF8?
    简体中文和UTF8就不是一伙子人;建议将客户端服务端都改成 AMERICAN_AMERICA.AL32UTF8;
    改了有效的话LZ告诉我一下!
    乱码问题全民关心的问题
      

  3.   

    redhat linux 5,oracle 11gredhat默认字符集是什么的?你在其他客户端(例如windows下)录入中文是乱码?
      

  4.   

    USERENV('LANGUAGE')
    只能确定当前用户 session 的环境语言,无论是客户端还是服务器端。能否保存中文,关键是看数据库字符集。
    select * from nls_database_parameters;

    select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
    检查一下数据库字符集是否支持中文。
      

  5.   

    有可能是环境变量的缘故,试试下面的方法:
    如果你用的是c shell,那么在 .cshrc 文件中添加这行
    (双引号的内容请根据你自己服务器上实际的字符集修改):
    setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"然后source 一把 .cshrc 文件。 
      

  6.   

    1)服务器的中文字符库装了没?、yum -qa fonts-chinese
    2)NLS_LANG变量设置了没?echo $NLS_LANG