Tags
characterset, junk values, NLS_CHARACTERSET, nls_database_parameters, NLS_LANG, NLS_LANGUAGE, NLS_TERRITORY, question marks, special characters, v$nls_parameters
There have been numerous questions on almost all the Oracle discussion forums about “Why are junk values displayed on my client” or ” Why do I see question marks or special characters in the table”. And, 99% of the cases are due to the mismatch between the locale-specific NLS characterset and the database characterset. Or else, the NLS_LANG value is not correctly set in the OS environmental variable.
You need to follow these simple steps :
- Check the locale-specific NLS characterset :
select value from v$nls_parameters where parameter = 'NLS_CHARACTERSET';
- Check the database characterset :
select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';
If you see a mismatch between the two, then set the locale-specific NLS characterset to that of database characterset.
If the above charactersets match, then you need to set the NLS_LANG value in the OS environmental variable.
For Windows OS, the format is [NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]
Follow the instruction in the documentation regarding setting up the NLS_LANG : Setting the NLS_LANG Environment Variable for Oracle Databases
Hope it helps!