Oracle strongly advises AGAINST what you are doing/trying to do:
Oracle strongly recommends that you do NOT set the
CHARin the instance or server parameter file. This may cause many existing installation scripts to unexpectedly create columns with character length semantics, resulting in run-time errors, including buffer overflows.
Set it at session level, or at worst, leave it set at instance level, at your own risk.
The database value of NLS_LENGTH_SEMANTICS is pretty irrelevant. I do not remember it being used for anything. Do not bother changing it. Also, a change is not possible once a database is created.
As Gaz mentioned, we discourage setting it at instance level as well to avoid inadvertently running Oracle and third-party scripts with unexpected semantics. Ideally, you should add the CHAR keyword to VARCHAR2(n) and CHAR(n) declarations in your scripts to make them independent from the setting. Alternatively, add an ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR statement after each CONNECT in your scripts.
Thanks guys !