D:>SQLPLUS "/ AS SYSDBA"
无法显示用ZHS16GBK插入的字符集,但可以显示用US7ASCII插入的字符集
SQL> SELECT * FROM TEST;
R1
----------
东北
??
更改服务器字符集为ZHS16GBK
SQL> update props$ set value$=’ZHS16GBK’ WHERE NAME=’NLS_CHARACTERSET’;
1 row updated.
SQL> COMMIT;
更改客户端字符集为ZHS16GBK
D:>SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
D:>SQLPLUS "/ AS SYSDBA"
可以显示以前US7ASCII的字符集,但无法显示用ZHS16GBK插入的数据,说明用ZHS16GBK插入的数据为乱码。
SQL> SELECT * FROM TEST;
R1
--------------------
东北
??
--------------------------------------------------------------------------------
需要指出的是,通过“update props$ set value$=’ZHS16GBK’ WHERE NAME=’NLS_CHARACTERSET’;”来修改数据库字符集是非常规作法,很可能引起问题,在这里只是原文引用网友的实验结果。
实验结果分析四
quote:
--------------------------------------------------------------------------------
SQL> INSERT INTO TEST VALUES(’东北’);
1 row created.
SQL> SELECT * FROM TEST;
R1
--------------------
东北
??
东北
SQL> EXIT
--------------------------------------------------------------------------------
由于此时数据库与客户端的字符集设置均为ZHS16GBK,所以不会发生字符集的转换,第一行与第三行数据显示正确,而第二行由于存储的数据就是63(00111111),所以显示的是“?”号。
quote: