Hallo Leute,

ich versuche mich gerade mit dem DDS Schlüsselwort VARLEN, um bei einem Feld mit 2048 Zeichen Platz zu sparen.

Zum Größenvergleich habe ich daher folgende Dateien erstellt:
PCHAR:
Code:
A          R PCHARF                                  
A*                                                   
A            CHTEXT      2048A         COLHDG('CHAR')
PCHARVAR:
Code:
A          R PCHARF                                     
A*                                                      
A            CHTEXT      2048A         COLHDG('VARCHAR')
A                                      VARLEN
Anschließend befülle ich beide Dateien mit jeweils folgenden SQL Befehlen:
Code:
INSERT INTO SPEED/PCHAR                           
VALUES('0123456789012345678901234567890123456789')
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
INSERT INTO SPEED/PCHAR
Dadurch habe ich in jeder Datei 4096 Sätze. Anschließend noch ein RGZPFM auf jede Datei.

Größen der Dateien (Dieses Ergebnis würde ich auch erwarten):
PCHAR: 8.400.896
PCHARVAR: 335.872

Wenn ich aber nun alle Datensätze der Datei PCHAR per CPYF in die Datei PCHARVAR kopiere (CPYF FROMFILE(SPEED/PCHAR) TOFILE(SPEED/PCHARVAR) MBROPT(*REPLACE) FMTOPT(
*MAP)), hat die Datei PCHARVAR folgende Größe:
9.510.912

Auch das ist in Ordnung, da ja nun auch die ganzen SPACES am Feldende enthalten sind.

Wenn ich aber nun per SQL das Feld CHTEXT der Datei PCHARVAR per RTRIM aktualisiere, hätte ich erwartet, dass auch die Datei entsprechend wieder kleiner wird.
Das SQL Statement:
UPDATE SPEED/PCHARVAR SET CHTEXT = rtrim(CHTEXT)

Die Dateigröße ist nun sogar noch größer geworden:
9.547.776

Auch ein RGZPFM bringt nicht meine erwartete Größe von 335.872 Byte.

Was habe ich falsch gemacht?

Viele Grüße
Matthias