Announcement

Collapse
No announcement yet.

varchar2() oracle in varchar() T-Sql

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

  • varchar2() oracle in varchar() T-Sql

    Hallo Leute ich habe ein problem mit den Varchar2 in Oracle.

    Ich habe ein definiertes Feld in einer Oracle Datenbank welches den Datentyp varchar2(30 Byte) besitzt. Nun soll dieses Feld in den SQL-Server gezogen werden. Kann ich hier die Definition varchar(30) nutzen?
    Kann ich davon ausgehen das 1 Byte = 1 Zeichen ist?

    Oder denke ich verkehrt und würde so den Inhalt verändern?

  • #2
    Das hängt am ehesten von den verwendeten Charsets ab.
    Wenn Du MultiByte Zeichen darin speicherst, kommst Du wohl nicht um eine Konvertierung rum.
    Dann ist es denkbar, dass die Byte Notation auch "missbräuchlich" gehandhabt wird und formal nicht mal aus Oracle Perspektive etwas korrektes drin steht.
    Es gibt ettliche Oracle Funktionen, die Byte und Char Länge und Codierung bzw. Convertierung als Funktion liefern. Weiß ich aber nicht auswendig.
    Damit solltest Du auf jeden Fall testen und Deine Daten untersuchen.
    Wenn bspw. die Charlänge Deiner Texte nie größer als 15 wird, verwendest Du in Oracle wahrscheinlich einen 2 Byte Zeichensatz.
    Wenn alles einsprachig ist, die Zeichenlänge deutlich über 15 liegt, ist es wahrscheinlich irgendeine OEM oder Ansi Codierung, die in ein VarChar(30) Feld übernommen werden kann.
    Dann wäre noch die Frage, wie Du migrieren willst. Export oder online über OLEDB Provider.
    Ratsam ist wahrscheinlich, per View und den oben genannten Funktionen eine definierte Konvertierung bereitzustellen.
    Gruß, defo

    Comment


    • #3
      Wie ist es in oracle definiert?

      als varchar2(15 BYTE)

      oder

      varchar2(15 CHAR)

      ?

      Comment


      • #4
        Originally posted by Bernhard Geyer View Post
        Wie ist es in oracle definiert?
        als varchar2(15 BYTE)
        oder
        varchar2(15 CHAR)
        ?
        hat er geschrieben
        Originally posted by deathdragon View Post
        ..Feld in einer Oracle Datenbank welches den Datentyp varchar2(30 Byte) besitzt.
        Gruß, defo

        Comment


        • #5
          Originally posted by defo View Post
          hat er geschrieben
          Hab ich überlesen (Schäm)

          Comment


          • #6
            Versuch mal das:

            http://psoug.org/definition/LENGTH.htm
            http://psoug.org/reference/convert_func.html (z.B. convert)

            Code:
            SELECT * FROM NLS_DATABASE_PARAMETERS;
            Welche Charsets sind definiert?

            P.S.:
            Originally posted by Bernhard Geyer View Post
            Hab ich überlesen..
            Könnte von mir sein
            Gruß, defo

            Comment


            • #7
              Parameter value
              ------------------------------ ----------------------------------------
              nls_language american
              nls_territory america
              nls_currency $
              nls_iso_currency america
              nls_numeric_characters .,
              nls_characterset we8roman8
              nls_calendar gregorian
              nls_date_format dd-mon-rr
              nls_date_language american
              nls_sort binary
              nls_time_format hh.mi.ssxff am
              nls_timestamp_format dd-mon-rr hh.mi.ssxff am
              nls_time_tz_format hh.mi.ssxff am tzr
              nls_timestamp_tz_format dd-mon-rr hh.mi.ssxff am tzr
              nls_dual_currency $
              nls_comp binary
              nls_length_semantics byte
              nls_nchar_conv_excp false
              nls_nchar_characterset al16utf16
              nls_rdbms_version 10.2.0.4.0


              die collation des SQL-Servers steht auf Latin1_General_CS_AS andere Datenbanken auf diesen SQL-Server verwenden Latin1_General_CI_AS

              Hilft das weiter?
              Zuletzt editiert von deathdragon; 24.06.2013, 14:53. Reason: zusätzliche Infos

              Comment


              • #8
                Bedingt, das beschreibt erstmal nur, wie der Server die Daten ablegt, also Characterset we8roman8 und N_Char Charkterset al16utf16.
                Für Dich relevant ist we8roman8, da es sich um eine VarChar2 Spalte und nicht NVarChar2 Spalte handelt.
                Der Charakterset ist laut Oracke SingleByte, ASCII.
                Damit wäre eine eine VarChar2(30 Char) und VarChar2(30 Byte) Felddefinition eigentlich gleichbedeutend.

                Das solltest Du mal über Deinen Datenbestand mit den verwiesenen Funktionen prüfen. Also length, lengthb, lengthb, convert, usw.

                z.B. Stichprobe:
                [CODE]Select length(meinFeld), lengthb(meinFeld), lengthc(meinFeld) from meineTabelle
                where length(meinFeld)<> lengthb(meinFeld)
                or lengthb(meinFeld)<>lengthb(meinFeld)

                Mit Convert ließe sich prüfen, ob eine Umwandlung in einen mächtigeren Zeichensatz reversibel ist.

                Auf MS SQL müsste ich selbst nachsuchen, was sich anbietet.
                Gruß, defo

                Comment

                Working...
                X