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

Hvordan gemmer man unicode-data til oracle?

Jeg kan se fem potentielle områder med problemer:

  1. Hvordan får du egentlig teksten ind i din .NET-applikation? Hvis det er hårdkodet i en streng-literal, er du så sikker på, at compileren antager den rigtige kodning for din kildefil?

  2. Der kan være et problem med, hvordan du sender det til databasen.

  3. Der kan være et problem med, hvordan det bliver gemt i databasen.

  4. Der kan være et problem med, hvordan du henter det i databasen.

  5. Der kan være et problem med, hvordan du viser det igen bagefter.

Nu lyder områder 2-4, som om de er mindre tilbøjelige til at være et problem end 1 og 5. Hvordan viser du teksten bagefter? Henter du det faktisk ud af databasen i .NET, eller bruger du Toad eller noget lignende til at prøve at se det?

Hvis du skriver det ud igen fra .NET, foreslår jeg, at du springer databasen helt over - hvis du bare viser selve strengen, hvad ser du så?

Jeg har en artikel, som du måske kan finde nyttig om fejlretning af Unicode-problemer. Koncentrer dig især om hvert sted, hvor kodningen kunne går galt, og sørg for, at når du "viser" en streng, dumper du de nøjagtige Unicode-tegn ud (som heltal), så du kan kontrollere dem i stedet for blot hvad din nuværende skrifttype ønsker at vise.

EDIT:Okay, så databasen er involveret et eller andet sted i problemet.

Jeg stærkt foreslå, at du fjerner noget som ASP og HTML ud af ligningen. Skriv en simpel konsol-app, der intet gør men indsæt snoren og hent den igen. Få det til at dumpe de individuelle Unicode-tegn (som heltal) før og efter. Prøv derefter at se, hvad der er i databasen (f.eks. ved at bruge Toad). Jeg kender ikke Oracle-funktionerne til at konvertere strenge til sekvenser af individuelle Unicode-tegn og derefter konvertere disse tegn til heltal, men det ville muligvis være det næste, jeg ville prøve.

EDIT:To forslag mere (godt at se konsolappen, btw).

  1. Angiv datatypen for parameteren i stedet for blot at give den et objekt. For eksempel:

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Overvej at bruge Oracles egen driver i stedet for den, der er indbygget i .NET. Du ønsker måske at gøre dette alligevel, da det generelt anses for at være hurtigere og mere pålideligt, tror jeg.



  1. Brug af Oracle® Heterogene Services med to ODBC-datakilder

  2. Oprettelse af en ODBC-linket server uden at konfigurere en datakilde

  3. mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_object

  4. PostgreSQL:FOREIGN KEY/ON SLET CASCADE