Oralce编码信息如下:
SQL> select * from nls_database_parameters;
PARAMETER                      VALUE
------------------------------ --------------------------------------------------------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               ZHS16GBK
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY              $
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              10.2.0.4.0
现在用php读出其中nvarchar2()字段,该字段保存的是汉字,读出后是乱码,请问该怎么解决呢

解决方案 »

  1.   

    NLS_CHARACTERSET               ZHS16GBK   这是 gbk 编码 
    NLS_NCHAR_CHARACTERSET         AL16UTF16 这是 unicode 编码
    你用的是哪一个?
    一般是在连接时声明你需要的编码
      

  2.   


    我的连接声明如下:
    $conn = new PDO("oci:dbname=" . $tns, $db_username, $db_password);
    $sql = "查询语句";
    $result = $conn->prepare($sql);
    $result->execute();$result->bindColumn("TITLE", $tilte, PDO::PARAM_STR);
    $result->fetch(PDO::FETCH_BOUND);  php文件使用的是utf-8无BOM编码oracle中的数据格式因为涉及到生产数据,不太好改,希望能通过php读取的时候做个什么操作可以把读出的中文字符转换为可显示的
      

  3.   

    在 $tns 中计入你需要的字符集,比如
    'oci:dbname=//10.34.137.18:1521/rpgd;charset=zhs16gbk'
    utf-8 应该怎么写,你自己试试
    'oci:dbname=//10.34.137.18:1521/rpgd;charset=utf-8'
    还是
    'oci:dbname=//10.34.137.18:1521/rpgd;charset=utf8'