sql >> Databáze >  >> RDS >> Oracle

Jak uložit data unicode do oracle?

Vidím pět potenciálních oblastí pro problémy:

  1. Jak vlastně dostáváte text do své .NET aplikace? Pokud je napevno zakódován v řetězcovém literálu, jste si jisti, že kompilátor předpokládá správné kódování pro váš zdrojový soubor?

  2. Může být problém ve způsobu, jakým jej posíláte do databáze.

  3. Může být problém s tím, jak je uložen v databázi.

  4. Může být problém s tím, jak jej načítáte do databáze.

  5. Může nastat problém s tím, jak jej poté znovu zobrazíte.

Nyní oblasti 2-4 zní, jako by byly méně pravděpodobné, že budou problémem než 1 a 5. Jak poté zobrazujete text? Vytahujete to skutečně z databáze v .NET, nebo používáte Toad nebo něco podobného, ​​abyste to viděli?

Pokud to píšete znovu z .NET, doporučuji vám úplně přeskočit databázi – pokud zobrazíte pouze samotný řetězec, co vidíte?

Mám článek, který by se vám mohl hodit o ladění problémů s Unicode. Zejména se soustřeďte na každé místo, kde by kódování mohlo pokazíte a ujistěte se, že kdykoli „zobrazíte“ řetězec, vypíšete přesné znaky Unicode (jako celá čísla), abyste je mohli zkontrolovat, nikoli jen to, co vaše aktuální písmo chce zobrazit.

EDIT:Dobře, takže databáze je zapletený někde do problému.

silně navrhněte, abyste z rovnice odstranili něco jako ASP a HTML. Napište jednoduchou konzolovou aplikaci, která nic nedělá ale vložte řetězec a vyzvedněte jej znovu. Nechte jej vypsat jednotlivé znaky Unicode (jako celá čísla) před a za. Pak zkuste zjistit, co je v databázi (např. pomocí Toad). Neznám funkce Oracle pro převod řetězců na sekvence jednotlivých znaků Unicode a poté převod těchto znaků na celá čísla, ale to by byla dost možná další věc, kterou bych zkusil.

EDIT:Další dva návrhy (dobré vidět konzolovou aplikaci, btw).

  1. Specifikujte datový typ parametru, místo abyste mu dávali pouze objekt. Například:

    command.Parameters.Add (":UnicodeString",
                            OracleType.NVarChar).Value = stringToSave;
    
  2. Zvažte použití vlastního ovladače Oracle namísto ovladače zabudovaného do .NET. Možná to budete chtít udělat i tak, protože se obecně předpokládá, že je rychlejší a spolehlivější.



  1. Jak vyřešit ORA-28000 účet je uzamčen

  2. Kdy použít seskupené nebo neklastrované indexy na serveru SQL Server

  3. Vkládání nových sloupců doprostřed tabulky?

  4. Získat výchozí hodnoty sloupců tabulky v Postgresu?