[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    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.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.966
    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

  3. #3
    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.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.980
    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 - 6. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.966
    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

  6. #6
    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.966
    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
  •