First a short introduction on the choice of character set and length semantics:
Using Unicode as a character set will allow you to store any character,
not just the western European characters you are normally limited to.
Unicode is a multi-byte character set which means that a single character could use more than a single byte. So what do you mean by VARCHAR2(10)?
Is this 10 characters or 10 bytes?
This used to be the same with our single byte character set, but with UTF8 this is no longer true.
You can specify VARCHAR2(10 BYTE) or VARCHAR2(10 CHAR) if you want to be specific.
However, APPX doesn’t use this syntax and does not specify either.
This is where the NLS_LENGTH_SEMANTICS parameter comes in.
You can set this to BYTE or CHAR basically defining which one of the two is the default when not specifying it explicitly.
A default Oracle installation will use BYTE semantics which will work with APPX.
However, if the default is changed to CHAR semantics, then APPX won't work without setting the following environment variable:
NLS_LENGTH_SEMANTICS=BYTE |