Database character set (al32utf8) and client character set (zhs16gbk) are different.
Character Set conversion may cause unexpected results.
Note: You can set the client character set through the nls_lang environment variable or the nls_lang registry key in
HKEY_LOCAL_MACHINE/software/Oracle/key_oradb11g_home
Simplified chinese_china.zhs16gbk contains american_america.al32utf8.
This is not a problem of modifying the character set of the client. The character set of the database to be modified:
SQL> Conn/As sysdba
SQL> shutdown immediate;
SQL> startup Mount
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes = 0;
SQL> alter system set aq_tm_processes = 0;
SQL> alter database open;
SQL> alter database character set zhs16gbk;
ORA-12712: new character set must be a superset of old Character Set
Note: The new character set must be a superset of the old one. In this case, we can skip the superset check and make changes:
SQL> alter database character set internal_use zhs16gbk;
-- We can see that this process is exactly the same as the internal process of the alter database character set operation. That is to say, the help provided by internal_use is that the Oracle database bypasses the validation of the subset and superset.
SQL> select * from V $ nls_parameters;
SQL> shutdown immediate;
SQL> startup
SQL> select * from V $ nls_parameters;
When you install oracle11g in the future, remember to select Custom installation and set up the character set in advance.