sql >> Databasteknik >  >> RDS >> Oracle

Hur sparar man Unicode-data till Oracle?

Jag kan se fem potentiella områden för problem:

  1. Hur får du egentligen in texten i din .NET-applikation? Om den är hårdkodad i en strängliteral, är du säker på att kompilatorn antar rätt kodning för din källfil?

  2. Det kan vara problem med hur du skickar det till databasen.

  3. Det kan vara problem med hur det lagras i databasen.

  4. Det kan vara problem med hur du hämtar den i databasen.

  5. Det kan vara problem med hur du visar det igen efteråt.

Nu låter områden 2-4 som att de är mindre sannolika att vara ett problem än 1 och 5. Hur visar du texten efteråt? Hämtar du verkligen det från databasen i .NET, eller använder du Toad eller något liknande för att försöka se det?

Om du skriver ut det igen från .NET föreslår jag att du hoppar över databasen helt - om du bara visar själva strängen, vad ser du då?

Jag har en artikel som du kan ha nytta av om felsökning av Unicode-problem. Koncentrera dig särskilt på varje plats där kodningen kunde gå fel, och se till att när du "visar" en sträng så dumpar du de exakta Unicode-tecknen (som heltal) så att du kan kontrollera dessa istället för bara vad ditt nuvarande teckensnitt vill visa.

EDIT:Okej, så databasen är inblandad någonstans i problemet.

Jag starkt föreslår att du tar bort något som ASP och HTML ur ekvationen. Skriv en enkel konsolapp som gör inget men sätt i snöret och hämta det igen. Få den att dumpa de individuella Unicode-tecknen (som heltal) före och efter. Försök sedan att se vad som finns i databasen (t.ex. genom att använda Toad). Jag känner inte till Oracle-funktionerna för att konvertera strängar till sekvenser av individuella Unicode-tecken och sedan konvertera dessa tecken till heltal, men det skulle mycket väl vara nästa sak jag skulle försöka.

EDIT:Ytterligare två förslag (bra att se konsolappen, btw).

  1. Ange datatypen för parametern, istället för att bara ge den ett objekt. Till exempel:

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Överväg att använda Oracles egen drivrutin istället för den som är inbyggd i .NET. Du kanske vill göra detta ändå, eftersom det i allmänhet anses vara snabbare och mer pålitligt, tror jag.



  1. Hur man hanterar Ruby on Rails-fel:Installera postgresql-adaptern:`gem install activerecord-postgresql-adapter'

  2. Hur säkerhetskopierar och återställer jag MySQL-databas?

  3. Hantera långsamma frågor med PostgreSQL

  4. Hur man installerar MariaDB på CentOS 7 / RHEL 7