Announcement

Collapse
No announcement yet.

UTF16 in ORACLE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • UTF16 in ORACLE

    Hallo,

    ich habe die Aufgabe, unser Programm, das in VB6 geschrieben ist, UNICODE- fähig zu machen. Die Daten werden sowohl in einer MS SQL-Datenbank gespeichert als auch in einer ORACLE-Datenbank. Die Daten werden auch hin und her kopiert vom MS-SQL nach ORACLE und umgekehrt.

    Es gab keine Probleme mit der MSSQL-Datenbank. man musste nur alle Varchar und NVarchar umstellen auf char auf nchar.

    In ORACLE habe ich nun zwei Möglichkeiten:

    Die Datenbak ganz UNICODE-fähig zu machen, indem ich den NLS_CHARACTERSET auf UTF8 Characterset setze, oder nur Spalten vom Typ NCHAR und NVARCHAR auf einen UTF8 bzw. UTF16 Characterset setze.

    Ich habe beides ausprobiert, doch leider bekomme ich, wenn ich Daten aus dem Recordset lese, immer einen UTF8- codierten String.

    Um den String richtig in VB6 zu verarbeiten, muss ich immer eine UTF16 Convertierung durchnehmen. Da unsere Anwenedung sehr umfangreich ist, und oft Zugriffe auf die Datenbank stattfindet, ist der Aufwand enorm. Deshalb muss die Möglichkeit bestehen, die String-Daten aus ORACLE-Tabellen direkt in eine UTF16 codierten String zu bekommen.

    Leider ist mir das bisher nicht gelungen.
    Laut ORACLE-Dolumentation habe ich nicht die Möglichkeit einen UTF-16 CHARACTERSET anzugeben. Dies geht nur für den NATIONAL CHARACTERSET.

    Aber auch hier bekomme ich einen UTF-8 codierten String.

    Ich vermute, dass dies an der NLS_LANG-Variablen liegt. Aber diese kann ich auch nur mit einem UTF-8 Zeichensatz setzen.
    Der Versuch, diese auf GERMAN_GERMANY.AL16UTF16 zu setzen, erzeugte einen Fehler.

    Oder kann ich dem Provider sagen, dass er gar keine Konvertierung durchführen soll?

    Wie bekomme ich aus einer ORACLE-Datenbank einen UTF16 codierten String??


    Ich bin dankbar für für jeden Hinweis!!!

    Viele grüße Christine

  • #2
    Welchen ADO-Provider verwendest Du?

    Comment


    • #3
      Hast Du schon mal die Funktion UNISTR() geprüft:
      Code:
      select dump(UNISTR('ABCäöüÄÜÖˆ')) unistr from dual;
      
      unistr
      -------------------------------------------------------------------------------
      Typ=1 Len=20: 0,65,0,66,0,67,0,228,0,246,0,252,0,196,0,220,0,214,2,198
      Gibt zumindest 2 Byte je Zeichen aus...

      Viel Erfolg
      JUM!
      Zuletzt editiert von jum; 21.01.2010, 15:41.

      Comment


      • #4
        In VB6 wird der Datentyp ADODB.Connection mit folgendem Connection-String verwendet:
        'Provider=MSDAORA;Data Source=UNI'

        Comment


        • #5
          Originally posted by Allugerb View Post
          In VB6 wird der Datentyp ADODB.Connection mit folgendem Connection-String verwendet:
          'Provider=MSDAORA;Data Source=UNI'
          Das ist schon ein riesen Fehler. Dieser Provider ist hoffnungslos veraltet und fehlerhaft und wird auch von MS nicht mehr gepflegt und wird vermutlich auch NLS_LANG-Angaben ignorieren. Besorg dir den Provider von Oracle.

          Comment


          • #6
            Danke,
            ich werde mir den aktuellen Provider herunterladen und versuchen,
            diesen zu integrieren.

            Ich werde mich dann wieder melden

            Comment


            • #7
              Hallo,

              habe nun den ORACLE OLEDB genommen und das funktioniert!!!


              Danke für die Hilfe

              Comment

              Working...
              X