Korrekt. Wobei inzwischen %char() und %ucs2() weitgehend überflüssig sind, da die Runtime inzwischen so intelligent ist, dass sie das automatisiert.

Was UTF8 angeht, so musst du hier theoretisch die 4-fache mögliche Zeichenkapazität berücksichtigen, wobei 2-fach ausreicht, ein Ü belegt 2 Bytes, in ein 30-stelliges Feld bekommst du dann nur 15 Ü's. Gespart hast du da nichts. Deshalb NCHAR, das ist generell 2 Bytes je Char.

Außerdem:
Mach mal mit SQL ein Select auf ein UTF8-Feld, DSPPFM u.ä. Dies betrifft also nicht nur RPG sondern alle Zugriffe incl. ODBC/JDBC. Alleine um einen Substring bzw. %subst() korrekt durchzuführen musst du das Feld erst mal in UCS2 wandeln, da Umlaute ja die Zeichenposition bereits verschieben.