cx_Oracle und deutsche Umlaute

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
drnicolas
User
Beiträge: 83
Registriert: Sonntag 24. Juli 2016, 10:32

Code: Alles auswählen

import cx_Oracle
import config
import os


os.environ['NLS_LANG'] ='GERMAN_GERMANY.WE8ISO8859P1'

connection = None

cx_Oracle.init_oracle_client(lib_dir='/opt/oracle/instantclient_21_9')
try:
    connection = cx_Oracle.connect(
        config.username,
        config.password,
        config.dsn,
        encoding=config.encoding)

    # show the version of the Oracle Database
    print(connection.version)
Mit diesem Code greife ich auf eine Oracle DB zu.

SELECT frunktioniert an sich, aber die deutschen Umlaute in Namen sind verkorkst.

encoding ist momentan UTF-8.

Ich finde leider keine Tabelle für den encoding Paramter wie cih damit auf die deutschen Umlaute komme.

Kann mir jemand helfen?

Das Ganze soll unter LINUX/Debian stattfinden
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ich nehme an, das Encoding sollte das Encoding der Datenbank sein.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Es macht eigentlich keinen Sinn, irgendetwas anderes als UTF8 zu benutzen:

Code: Alles auswählen

os.environ['NLS_LANG'] ='GERMAN_GERMANY.UTF8'
@sparrow: nein, die Datenbank konvertiert automatisch von ihrer internen Repräsentation zum Client-Encoding.
drnicolas
User
Beiträge: 83
Registriert: Sonntag 24. Juli 2016, 10:32

Ich habe jetzt mal die Datenbank selber abgefragt:
Ich bekomme W8MSWIN1252

Ich habe inzwischen wild alle möglichen Einstellungen für encoding probiert: Es kommt immer Blödsinn, aber durchaus unterschiedlicher Blödsinn
drnicolas
User
Beiträge: 83
Registriert: Sonntag 24. Juli 2016, 10:32

Updated: Interessanterweise kommen die Umlaute selbst in SQL Developer falsch wenn ich die Tabelle direkt anschaue
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann kann es ja sein, dass bereits beim Schreiben Blödsinn in die Datenbank geschrieben worden ist.
In den Oracle-Tabellen sollte man nur Unicode-Zeichensätze verwenden. Und für den Client sollte man auch immer UTF8 angeben.
Also am besten die Datenbank neu aufsetzen und von vornherein richtig befüllen.
drnicolas
User
Beiträge: 83
Registriert: Sonntag 24. Juli 2016, 10:32

Die DB ist von einem Drittanbieter und mit den zugehörigen Clients kommen die Umlaute auch richtig raus. Dort sind die Umlaute mit Sicherheit richtig.

Mit UTF-8 encoding hat es nicht funktioniert
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Nagut, wenn der Drittanbieter falsche Zeichen in die Datenbank schreibt, und die dann selbst wieder beim Lesen falsch interpretiert, dann liegt die Schuld eindeutig bei diesem Drittanbieter.
Kannst Du mal ein paar falsche Umlaute hier posten?
drnicolas
User
Beiträge: 83
Registriert: Sonntag 24. Juli 2016, 10:32

Glaube ich eher nicht.
In der zugehörigen Front-end-Software passt es ja.

Ich denke, das Problem liegt auf meiner Seite.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@drnicolas: Naja, wenn die das konsequent falsch macht, dann passt das dort ja. Das kann trotzdem falsch in der DB stehen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten