Oracle 11gからPHP7 OCI8(PDO_OCIとODBCで試してみましたが、PHP5でも同様です)からUnicode文字(簡体字の中国語名)同じ問題)Linux Ubuntuサーバー14.04で。PHP OCI8 NCHAR(Oracle 11g)からUnicode文字を読み込むことができません
これは、Oracle 11gの設定です:私は読んしようとしている
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET WE8MSWIN1252
NLS_SORT BINARY
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
重要なテーブルの列がNCHAR(40)と定義されます。
<?php
$fp = fopen('output.txt','w');
$conn = oci_connect('MYUSER', 'MYPASSWORD', 'xxx.xxx.xxx.xxxx/DBTEST','AL32UTF8');
$query = "SELECT ABALPH FROM CRPDTA.F0101 WHERE ROWNUM <= 1 ORDER BY NULL";
$stid = oci_parse($conn, $query);
oci_execute($stid, OCI_NO_AUTO_COMMIT);
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
fwrite($fp, $row['ABALPH']."\n");
}
fclose($fp);
?>
は、その後、私は英語の名前を見ることができます: 私は、PHP-7.0.8 NTSを使用し、(PECLから)とoci8-2.0.11は、Oracle instantclientに
をインストールこれは私が使用しているPHPのコードがあります私は中国語の名前のために私のtxtファイル(UTF8 w/o BOM形式)に¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿私はこれがNCHAR(40)データ型に関連していると思います。
私はOracle env変数を直接(エクスポートおよび/またはputenv()を通じて)設定しました。 sqlplusコマンドを使用すると、読み取り可能な中国語の名前をファイルにエクスポートできます。export NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
これを解決する方法はありますか?私は大いに感謝しています!私は記事のコメントを読むthis post
に解決策を見つけたと思う よろしく、セルジオ