In der vergangenen Serialisierung haben wir so vorgegangen, dass japanische Daten nicht verarbeitet wurden. Die meisten Leute, die diese Serie lesen, arbeiten jedoch wahrscheinlich in einer japanischen Umgebung und verwenden die Oracle-Datenbank für japanische Daten. Dieses Mal werde ich erklären, wie mit SELECT der Tabelle umgegangen wird, in der Japanisch ohne verstümmelte Zeichen gespeichert ist.
Verwenden Sie SQL * Plus, SQL Developer usw., um das folgende Skript auszuführen. Sie können eine vorhandene Tabelle ersetzen, die japanische Daten enthält.
sample05a.sql
create table sample05a (col1 varchar2(50));
insert into sample05a values('Japan Oracle Co., Ltd.');
commit;
NLS_LANG Die folgenden Anwendungen werden als Muster vorbereitet. Wenn Sie zuvor eine andere Tabelle vorbereitet haben, ändern Sie die SELECT-Anweisung so, dass die japanische Datenspalte in der ersten Spalte angegeben ist, und führen Sie sie aus. In diesem Fall zeigt diese Beispielanwendung nur eine Zeile an. Wenn Sie also durch Angabe des Primärschlüssels in der WHERE-Klausel auf eine eingrenzen und Maßnahmen ergreifen können, z. B. die Anzahl der Zeilen auf die erste Zeile beschränken, zusätzliche Verarbeitungszeit Nimm nicht.
sample05b.py
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = "select * from sample05a"
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
print((cursor.execute(SQL).fetchone())[0])
Wenn Sie Japanisch unterstützen müssen, wenn Sie eine Anwendung ausführen, die auf Oracle Database zugreift, müssen Sie in den meisten Umgebungen die Umgebungsvariable NLS_LANG festlegen. NLS_LANG gilt auch für cx_Oracle. Das Folgende ist ein Vergleich der obigen Anwendungen mit und ohne NLS_LANG.
$ echo $LANG
en_US.UTF-8
$ echo $NLS_LANG
$ python sample05b.py
??????????
$ export NLS_LANG=japanese_japan.al32utf8
$ python sample05b.py
Japan Oracle Co., Ltd.
Vor dem Festlegen von NLS_LANG werden die Daten nicht korrekt als "??????????" angezeigt. In der Oracle-Datenbank wird "?" Angezeigt, wenn die Zeichencodekonvertierung zwischen der Datenbank und dem Client nicht möglich ist. Nach dem Setzen von NLS_LANG wird es korrekt angezeigt.
In cx_Oracle kann neben NLS_LANG die Zeichenkodierung in der Argumentkodierung zum Zeitpunkt der Verbindung angegeben werden (Methode connect () von cx_Oracle). Das Standardcodierungsargument ist Keine und nichts ist festgelegt. Da UTF-8 in Python3 Standard ist, können Sie japanische Daten anzeigen, ohne NLS_LANG festzulegen, wenn Sie eine Verbindung herstellen, indem Sie UTF-8 in der Codierung angeben. Wenn Sie jedoch beispielsweise Oracle Database-Fehlermeldungen auf Japanisch erhalten möchten, benötigen Sie NLS_LANG. Sie müssen auch Nicht-Python-Anwendungen wie SQL * Plus berücksichtigen. Daher empfiehlt es sich, diese in NLS_LANG zu verschieben oder sowohl NLS_LANG als auch Codierung festzulegen.
sample05c.py(Auszug)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION, encoding="UTF-8") as connection:
Recommended Posts