[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    136

    SQL BLOB Daten UTF-8 nach VARCHAR UTF-8 convertieren

    Hallo,
    ich habe das vergnügen alte UTF-8 Daten, die in einen BLOB Feld gespeichert sind zur verarbeiten.

    Im folgenden Beispiel sind die Daten durch den VARBINARY simuliert.
    Der CAST von 65535 nach 1208 funktioniert natürlich nicht, wäre aber das was ich benötige. Mit 273 funktioniert das CAST zwar, aber dann sind die Daten natürlich im Eimer.

    PHP-Code:
    SELECT 
    CAST
    (
    CAST(
    VARBINARY(CAST('' as varchar(50ccsid 1208))
    as 
    varchar(50CCSID 65535
    as 
    varchar(50CCSID 1208
    FROM SYSIBM.SYSDUMMY1
    Hat jemand noch eine Idee wie man da ran kommt, oder bleit nur eine eigene SQL Funktion als Lösung übrig?

    Grüße
    Xanas

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Du musst den VARBINARY mit 65535 casten, dann nach 1208.
    Dadurch erfolgt keine Codewandlung.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2004
    Beiträge
    136
    Meinst du damit diese Zeile?

    PHP-Code:
    VARBINARY(CAST('' as varchar(50ccsid 1208)) 
    Diese Zeile simuliert wie gesagt nur die Bestandsdaten, die stehen so in dem BLOB Feld, mir geht es um die beiden CAST drum herum.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Genau.
    Zwischen N und 65535 und 65535 und N wird keine Codewandlung durchgeführt beim Cast.
    Wichtig ist zu wissen, welche CCSID das deklarierte Feld hat.
    Ist dieses N musst du es nach 65535 casten, da sonst eine Codewandlung durchgeführt wird.
    Ist dieses wirklich 65535 reicht ein Cast auf 1208, da es dann die Annahme von UTF8 bedeutet.
    Letztlich musst du prüfen, was wirklich in dem Feld steht, z.B. mit der HEX(Feld)-Umwandung.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Sep 2004
    Beiträge
    136
    Ja genau so hab ich auch gedacht, aber wenn ich lediglich den hier versuche, werde ich diesem Fehler belohnt.

    PHP-Code:
    SELECT
      CAST
    (
        
    VARBINARY(CAST('!DOCTYPE html' as varchar(50ccsid 1208))
      AS 
    VARCHAR(50ccsid 1208)
    FROM SYSIBM.SYSDUMMY1;

    // Das ist was ich eigentlich machen möchte, das VARBINARY ist nur das was in meinem Feld steht, habe ich auf HEX geprüft.

    SELECT  
      CAST
    (MY_BLOB_FIELD AS VARCHAR(50ccsid 1208)
    FROM txk01pf
    Anbietercode: -332
    Nachricht: [SQL0332] Zeichenumsetzung zwischen CCSID 65535 und CCSID 1208 ungültig. Ursache . . . . : Es wurde versucht, eine Zeichen- oder Grafikumsetzung für nicht verträgliche Daten durchzuführen. Eine Umsetzung zwischen CCSID 65535 und CCSID 1208 ist nicht definiert. Ist eine CCSID 65535, ist die andere CCSID eine Grafik-CCSID. Die Umsetzung zwischen der CCSID 65535 und einer Grafik-CCSID ist nicht definiert. Handelt es sich um eine Anweisung CONNECT, ist die Umsetzung zwischen der Standard-SBCS-CCSID des Anwendungs-Requesters und der SBCS-CCSID des Anwendungsserver nicht definiert. Ist die zweite CCSID 0, wurde die Standard-SBCS-CCSID des Anwendungsservers nicht zurückgegeben. Ein Anwendungsserver, der kein DB2 für IBM i-Anwendungsserver ist, unterstützt die CCSID 65535 möglicherweise nicht. Fehlerbeseitigung: Sicherstellen, dass jeder Zeichen- oder Grafikvergleich, jede Zeichen- oder Grafikverknüpfung und jede Zeichen- oder Grafikzuordnung zwischen Spalten oder Host-Variablen erfolgt, die verträgliche CCSID-Werte haben. Handelt es sich um eine Anweisung CONNECT, entweder die SBCS-CCSID des Anwendungs-Requesters oder des Anwendungsservers ändern, damit die Umsetzung zwischen den CCSID-Werten definiert ist.

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Schau Dir mal die skalare Funktion INTERPRET an, ob Du damit weiterkommst
    https://www.ibm.com/docs/en/i/7.5?to...ions-interpret
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Ja, da gibts dann ein Beispiel sogar dafür.

    INTERPRET(BX'616263' AS CHAR(3) CCSID 1208)

    Alle CAST-Funktionen versuchen natürlich eine Codewandlung, wobei bisher galt, dass eine Binary-CCSID wie 65535 nicht gewandelt wird. Nun sehe ich da die Fehlermeldung, dass 1208 und wahrscheinlich auch 1200 davon ausgenommen sind.
    Interpret gibts allerdings erst ab V7R3.
    Ansonsten hilft nur eine eigene externe SQL-Funktion, in der du per Overlay-DS Daten anders interpretieren kannst.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Sep 2004
    Beiträge
    136
    INTERPRET hatte ich auch schon gequält, aber der ist es!
    Mein Problem war, ich hab VARCHAR statt CHAR verwendet.

    SELECT
    RTRIM(INTERPRET(TKFLT1 AS CHAR(32000) CCSID 1208))
    FROM txk01pf;

    Dankeschön für die Hilfe

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Varchar hat eine 2/4-Byte-Längeninformation am Anfang.
    Da kann man sich ja nun auch die geschachtelten CCSID-Cast endlich mal sparen.
    Einfach nur noch:

    INTERPRET(MyChar273 as CHAR(nn) CCSID 1142).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. varchar in CL
    By wilfried in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 12-10-17, 10:09
  2. VARCHAR Felder(UTF-8) und ILE RPG
    By uditzen in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 26-06-15, 10:03
  3. VARCHAR/VARGRAPHIC
    By alfredo in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 28-11-06, 11:43
  4. Daten convertieren
    By magdalena in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-03-06, 15:42
  5. VARCHAR RPG + DB
    By harkne in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 18-11-05, 10:06

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •