Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment enregistrer des données Unicode sur Oracle ?

Je peux voir cinq domaines potentiels de problèmes :

  1. Comment obtenez-vous réellement le texte dans votre application .NET ? S'il est codé en dur dans un littéral de chaîne, êtes-vous sûr que le compilateur suppose le bon encodage pour votre fichier source ?

  2. Il peut y avoir un problème dans la façon dont vous l'envoyez à la base de données.

  3. Il pourrait y avoir un problème avec la façon dont il est stocké dans la base de données.

  4. Il peut y avoir un problème avec la façon dont vous le récupérez dans la base de données.

  5. Il peut y avoir un problème avec la façon dont vous l'affichez à nouveau par la suite.

Désormais, les zones 2 à 4 semblent moins susceptibles de poser problème que les zones 1 et 5. Comment affichez-vous le texte par la suite ? Le récupérez-vous réellement de la base de données dans .NET, ou utilisez-vous Toad ou quelque chose de similaire pour essayer de le voir ?

Si vous l'écrivez à nouveau à partir de .NET, je vous suggère d'ignorer complètement la base de données - si vous affichez simplement la chaîne elle-même, que voyez-vous ?

J'ai un article que vous pourriez trouver utile sur le débogage des problèmes Unicode. En particulier, concentrez-vous sur chaque endroit où l'encodage pourrait va mal, et assurez-vous que chaque fois que vous "affichez" une chaîne, vous videz les caractères Unicode exacts (sous forme d'entiers) afin que vous puissiez les vérifier plutôt que ce que votre police actuelle veut afficher.

EDIT :d'accord, donc la base de données est impliqué quelque part dans le problème.

Je fortement suggérons que vous supprimiez quelque chose comme ASP et HTML de l'équation. Écrire une application console simple qui ne fait rien mais insérez la chaîne et récupérez-la à nouveau. Faites-le vider les caractères Unicode individuels (sous forme d'entiers) avant et après. Ensuite, essayez de voir ce qu'il y a dans la base de données (par exemple, en utilisant Toad). Je ne connais pas les fonctions Oracle pour convertir des chaînes en séquences de caractères Unicode individuels, puis convertir ces caractères en entiers, mais ce serait très probablement la prochaine chose que j'essaierais.

EDIT :Deux autres suggestions (bien de voir l'application console, d'ailleurs).

  1. Spécifiez le type de données pour le paramètre, au lieu de lui donner simplement un objet. Par exemple :

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Envisagez d'utiliser le propre pilote d'Oracle au lieu de celui intégré à .NET. Vous voudrez peut-être le faire quand même, car il est généralement considéré comme plus rapide et plus fiable, je crois.