Oracle
 sql >> Database >  >> RDS >> Oracle

Come salvare i dati Unicode su Oracle?

Vedo cinque potenziali aree di problemi:

  1. Come stai effettivamente inserendo il testo nella tua applicazione .NET? Se è codificato in una stringa letterale, sei sicuro che il compilatore stia assumendo la codifica corretta per il tuo file sorgente?

  2. Potrebbe esserci un problema nel modo in cui lo stai inviando al database.

  3. Potrebbe esserci un problema con la modalità di archiviazione nel database.

  4. Potrebbe esserci un problema con il modo in cui lo stai recuperando nel database.

  5. Potrebbe esserci un problema con il modo in cui lo visualizzi di nuovo in seguito.

Ora le aree 2-4 sembrano avere meno probabilità di essere un problema rispetto a 1 e 5. Come visualizzi il testo in seguito? Lo stai effettivamente recuperando dal database in .NET o stai usando Toad o qualcosa di simile per provare a vederlo?

Se lo stai scrivendo di nuovo da .NET, ti suggerisco di saltare completamente il database:se visualizzi solo la stringa stessa, cosa vedi?

Ho un articolo che potresti trovare utile sul debug dei problemi Unicode. In particolare, concentrati su ogni luogo in cui la codifica potrebbe andare storto e assicurati che ogni volta che "visualizzi" una stringa elimini i caratteri Unicode esatti (come numeri interi) in modo da poterli controllare anziché solo ciò che il tuo carattere attuale vuole visualizzare.

EDIT:Ok, quindi il database è coinvolti da qualche parte nel problema.

Io fortemente suggerire di rimuovere qualsiasi cosa come ASP e HTML dall'equazione. Scrivi una semplice app per console che non faccia nulla ma inserisci la stringa e recuperala di nuovo. Fallo scaricare i singoli caratteri Unicode (come numeri interi) prima e dopo. Quindi prova a vedere cosa c'è nel database (ad esempio usando Toad). Non conosco le funzioni Oracle per convertire stringhe in sequenze di singoli caratteri Unicode e quindi convertire quei caratteri in numeri interi, ma molto probabilmente sarebbe la prossima cosa che proverei.

EDIT:altri due suggerimenti (buono per vedere l'app della console, tra l'altro).

  1. Specificare il tipo di dati per il parametro, invece di assegnargli semplicemente un oggetto. Ad esempio:

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Prendi in considerazione l'utilizzo del driver di Oracle invece di quello integrato in .NET. Potresti volerlo fare comunque, dato che generalmente è considerato più veloce e affidabile, credo.