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

Wie speichere ich Unicode-Daten in Oracle?

Ich sehe fünf potenzielle Bereiche für Probleme:

  1. Wie bekommen Sie eigentlich den Text in Ihre .NET-Anwendung? Wenn es in einem String-Literal fest codiert ist, sind Sie sicher, dass der Compiler die richtige Codierung für Ihre Quelldatei annimmt?

  2. Es könnte ein Problem beim Senden an die Datenbank geben.

  3. Es könnte ein Problem mit der Speicherung in der Datenbank geben.

  4. Es könnte ein Problem damit geben, wie Sie es aus der Datenbank abrufen.

  5. Es könnte ein Problem mit der späteren Anzeige geben.

Jetzt scheinen die Bereiche 2-4 weniger wahrscheinlich ein Problem zu sein als die Bereiche 1 und 5. Wie zeigen Sie den Text danach an? Holen Sie es tatsächlich aus der Datenbank in .NET, oder verwenden Sie Toad oder etwas Ähnliches, um zu versuchen, es zu sehen?

Wenn Sie es erneut aus .NET schreiben, schlage ich vor, dass Sie die Datenbank vollständig überspringen - wenn Sie nur die Zeichenfolge selbst anzeigen, was sehen Sie?

Ich habe einen Artikel zum Debuggen von Unicode-Problemen, den Sie möglicherweise nützlich finden. Konzentrieren Sie sich insbesondere auf alle Stellen, an denen die Codierung könnte schief gehen, und stellen Sie sicher, dass Sie jedes Mal, wenn Sie einen String "anzeigen", die genauen Unicode-Zeichen (als Ganzzahlen) ausgeben, damit Sie diese überprüfen können, anstatt nur das, was Ihre aktuelle Schriftart anzeigen möchte.

EDIT:Okay, also die Datenbank ist irgendwo in das Problem involviert.

Ich stark schlagen vor, dass Sie alles wie ASP und HTML aus der Gleichung entfernen. Schreiben Sie eine einfache Konsolenanwendung, die nichts tut aber fügen Sie die Zeichenfolge ein und rufen Sie sie erneut ab. Lassen Sie die einzelnen Unicode-Zeichen (als Ganzzahlen) davor und danach ausgeben. Versuchen Sie dann zu sehen, was sich in der Datenbank befindet (z. B. mit Toad). Ich kenne die Oracle-Funktionen nicht, um Strings in Sequenzen einzelner Unicode-Zeichen umzuwandeln und diese Zeichen dann in Ganzzahlen umzuwandeln, aber das wäre wahrscheinlich das nächste, was ich versuchen würde.

BEARBEITEN:Zwei weitere Vorschläge (gut, die Konsolen-App zu sehen, übrigens).

  1. Geben Sie den Datentyp für den Parameter an, anstatt ihm nur ein Objekt zuzuweisen. Zum Beispiel:

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Erwägen Sie die Verwendung des eigenen Treibers von Oracle anstelle des in .NET integrierten Treibers. Vielleicht möchten Sie dies trotzdem tun, da es allgemein als schneller und zuverlässiger gilt, glaube ich.