Ich verbringe Tage damit, Unicode-Zeichen (vereinfachtes Chinesisch) von einer Oracle 11g über PHP7 OCI8 zu lesen (versucht mit PDO_OCI und ODBC und auch in PHP5, gleiches Problem) auf Linux Ubuntu Server 14.04.PHP OCI8 Unicode-Zeichen aus NCHAR (Oracle 11g) nicht lesen
Das sind die Oracle 11g-Einstellungen:
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
Wichtige Die Tabellenspalte ich zu lesen bin versucht, als NCHAR definiert (40). ich php-7.0.8 NTS verwenden, oci8-2.0.11 (von PECL) und installiert Oracle instant
Dies ist der PHP-Code Ich verwende:
<?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);
?>
Dann kann ich englischen Namen sehen aber ich bekomme in meine txt-Datei (UTF8 ohne BOM-Format) für chinesische Namen. Ich denke, das hängt mit dem NCHAR (40) -Datentyp zusammen.
Bitte beachten Sie, dass ich die Oracle-env-Variablen direkt eingestellt habe (durch Export und/oder putenv()). Wenn ich den sqlplus-Befehl verwende, kann ich lesbare chinesische Namen in eine Datei exportieren, die ich gesetzt habe. Export NLS_LANG = "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
Irgendeine Idee, wie man das löst? Ich würde es sehr schätzen! Grüße, Sergio