CRTPF ohne DDS erstellt immer mit CCSID *HEX (65535).
CREATE TABLE per SQL erstellt bei Zeichenfeldern grundsätzlich mit CCSID, da diese auf Feldebene angegeben wird.
*HEX muss man explizit angeben oder man verwendet binary Felder.

Am Besten eignet sich da QM-Query, da diese zur Laufzeit auch eine Ausgabedatei erstellen können. Hier wird SQL verwendet und somit auch mit CCSID gearbeitet.

Für dein Spoolproblem könnte die Lösung ja nun so aussehen:

CRTPF in QTEMP mit CCSID 65535
CPYSPLF
STRQMQRY QMQRY(MYSQL) OUTPUT(*OUTFILE) OUTFILE(QTEMP/MYOUT)
CPYTOIMPF

Der QMQRY MYSQL kann dann direkt deinen Select enthalten.
Wenn du willst, kannst du auch Parameter verwenden um den Dateinamen z.B. dynamisch zu haben:

select ....
from &myfile

STRQMQRY ... SETVAR((MYFILE 'QTEMP/MYSPLF'))

Wenn du nun mehrere Spools zu einer Ausgabe zusammenfassen musst, kannst du beim 1. QMQRY OUTMBR(*FIRST *REPLACE) und in den folgenden OUTMBR(*FIRST *ADD) angeben. *REPLACE/*ADD kannst du auch in eine Variable packen.

In einem anderen Thread hat einer getestet, dass bei großen Datenmengen die CSV-Aufbereitung in SQL schneller ist, als im CPYTOIMPF.
Ausserdem ist man ggf. variabler was die Vornullen oder für Excel die Zeichenbehandlung angeht:

char(feld) <= linksbündig ohne Vornull
digits(feld) <= mit Vornull, allerdings ohne Komma, kann man aber mit substr() aufteilen.

Auch die Interpretation von Numerisch als Zeichen für Excel kann in SQL gelöst werden:

'''' concat digits(mynum) concat ';' <= man beachte die 4 Hochkomma

Die PF enthält dann bereits das CSV-Format, man kann es schön testen und anschließend reicht ein CPYTOSTMF, der eben schneller als CPYTOIMPF ist.