Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zapisać dane Unicode w Oracle?

Widzę pięć potencjalnych obszarów problemów:

  1. W jaki sposób faktycznie wprowadzasz tekst do swojej aplikacji .NET? Jeśli jest zakodowany na stałe w literale ciągu, czy jesteś pewien, że kompilator zakłada właściwe kodowanie dla twojego pliku źródłowego?

  2. Może wystąpić problem z wysyłaniem go do bazy danych.

  3. Może wystąpić problem z przechowywaniem w bazie danych.

  4. Może wystąpić problem z pobieraniem danych z bazy danych.

  5. Może wystąpić problem z ponownym wyświetlaniem go później.

Teraz obszary 2-4 brzmią tak, jakby były mniej prawdopodobne, że będą stanowić problem niż 1 i 5. W jaki sposób wyświetlasz później tekst? Czy faktycznie pobierasz go z bazy danych w .NET, czy używasz Toad lub czegoś podobnego, aby spróbować to zobaczyć?

Jeśli piszesz go ponownie z .NET, sugeruję, aby całkowicie pominąć bazę danych - jeśli po prostu wyświetlasz sam ciąg, co widzisz?

Mam artykuł, który może Ci się przydać na temat debugowania problemów z Unicode. W szczególności skoncentruj się na każdym miejscu, w którym kodowanie może nie pomylisz się i upewnij się, że za każdym razem, gdy "wyświetlasz" ciąg, wyrzucasz dokładne znaki Unicode (jako liczby całkowite), dzięki czemu możesz je sprawdzić, a nie tylko to, co ma wyświetlać Twoja aktualna czcionka.

EDYCJA:OK, więc baza danych jest zaangażowanych gdzieś w problem.

zdecydowanie zasugeruj usunięcie z równania czegoś takiego jak ASP i HTML. Napisz prostą aplikację konsolową, która nic nie robi ale wstaw ciąg i pobierz go ponownie. Zrób zrzut poszczególnych znaków Unicode (jako liczb całkowitych) przed i po. Następnie spróbuj zobaczyć, co jest w bazie danych (np. za pomocą Toada). Nie znam funkcji Oracle, które konwertują ciągi na sekwencje pojedynczych znaków Unicode, a następnie konwertują te znaki na liczby całkowite, ale prawdopodobnie byłaby to następna rzecz, którą bym spróbował.

EDYCJA:Dwie dodatkowe sugestie (dobrze zobaczyć aplikację konsolową, btw).

  1. Określ typ danych dla parametru, zamiast podawać mu tylko obiekt. Na przykład:

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Rozważ użycie własnego sterownika Oracle zamiast wbudowanego w .NET. I tak możesz chcieć to zrobić, ponieważ ogólnie uważa się, że jest to szybsze i bardziej niezawodne, jak sądzę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zablokuj bazę danych Oracle przed uruchomieniem skryptów usuwania/ładowania danych

  2. Oracle SQL:Niedozwolona kolumna

  3. Funkcja EXP() w Oracle

  4. Podzapytania rekurencyjne z sortowaniem

  5. Jak uzyskać wiek w latach, miesiącach i dniach za pomocą Oracle?