Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wenn wir einen US7ASCII-Zeichensatz haben, warum können wir Nicht-ASCII-Zeichen speichern?

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.