Es funktioniert, weil die folgenden Bedingungen beide wahr sind:
- Der Zeichensatz des Clients entspricht dem Zeichensatz Ihrer Datenbank.
- Der Zeichensatz lässt beliebige Bytewerte zu
Ihr Datenbank-Zeichensatz und Ihr Client-Zeichensatz sind auf US7ASCII
eingestellt . In diesem Fall werden alle Daten einzeln ohne Konvertierung geschrieben/gelesen, d. h. die von Ihnen gesendeten Bytes werden genau in die Datenbank geschrieben. Wahrscheinlich haben Sie NLS_LANG
nicht gesetzt überhaupt auf Ihrer Client-Seite, aber Oracle verwendet standardmäßig AMERICAN_AMERICA.US7ASCII
.
US7ASCII
ist eine 7-Bit-Kodierung. Ich gehe davon aus, dass eine reine ASCII-Anwendung (die ziemlich schwer zu finden sein könnte) einfach das 8. Bit ignorieren würde, das in einer 8-Bit-Architektur gespeichert ist. Andere Zeichensätze, z. AL32UTF8
Lassen Sie nicht jeden Bytewert zu. In diesem Fall werden solche Zeichen durch einen Platzhalter ersetzt, z. ¿
oder ?
.
Beachten Sie, dass Sie Ihren Client-Zeichensatz auf US7ASCII
setzen was höchstwahrscheinlich nicht stimmt. Stellen Sie ihn richtig auf den Zeichensatz ein, der von Ihrer Anwendung verwendet wird, dann °
wird ersetzt.
Falls Sie SQL*Plus verwenden, überprüfen Sie die Codepage der Konsole mit dem Befehl chcp
, bzw. locale charmap
. Legen Sie Ihre NLS_LANG
fest Umgebungsvariable entsprechend, bevor Sie sqlplus starten.