查看数据库字符集
SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%';
PARAMETER VALUE
------------------------- ------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> select * from nls_database_parameters;
查看用户环境字符集
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
查看客户端字符集
SQL> select * from nls_instance_parameters;
查看会话字符集
SQL> select * from nls_session_parameters;
SQL> select * from v$nls_parameters;
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
export NLS_LANG=American_America.AL32UTF8
正常显示:
操作系统——ZHS16GBK
SQLPLUS——ZHS16GBK
数据库——ZHS16GBK
操作系统——AL32UTF8
SQLPLUS——AL32UTF8
数据库——AL32UTF8
乱码显示:
操作系统——ZHS16GBK
SQLPLUS——AL32UTF8
数据库——ZHS16GBK
操作系统——AL32UTF8
SQLPLUS——ZHS16GBK
数据库——AL32UTF8
总结:避免乱码,要保证客户端(SQLPLUS)字符集与数据库字符集一致,但语言可以不一致。设置完需重新登录session,已经错乱的字符一旦添加到数据库中,即使再恢复成一致的字符集,依然无法正确显示乱码。
SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%';
PARAMETER VALUE
------------------------- ------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> select * from nls_database_parameters;
查看用户环境字符集
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
查看客户端字符集
SQL> select * from nls_instance_parameters;
查看会话字符集
SQL> select * from nls_session_parameters;
SQL> select * from v$nls_parameters;
设置客户端字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
set NLS_LANG=American_America.AL32UTF8
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
export NLS_LANG=American_America.AL32UTF8
正常显示:
操作系统——ZHS16GBK
SQLPLUS——ZHS16GBK
数据库——ZHS16GBK
操作系统——AL32UTF8
SQLPLUS——AL32UTF8
数据库——AL32UTF8
乱码显示:
操作系统——ZHS16GBK
SQLPLUS——AL32UTF8
数据库——ZHS16GBK
操作系统——AL32UTF8
SQLPLUS——ZHS16GBK
数据库——AL32UTF8
总结:避免乱码,要保证客户端(SQLPLUS)字符集与数据库字符集一致,但语言可以不一致。设置完需重新登录session,已经错乱的字符一旦添加到数据库中,即使再恢复成一致的字符集,依然无法正确显示乱码。