从oracle数据库中导一个数据的时候出现了一个很奇怪的问题,中文乱码。 首先可以确认的一点,数据在数据库中是以中文存在的,还有
从oracle数据库中导一个数据的时候出现了一个很奇怪的问题,中文乱码。 首先可以确认的一点,数据在数据库中是以中文存在的,还有就是用toad进行连接查询的时候也是中文。 但是在服务器端直接用sqlplus 连接查询之后,所有中文都显示为乱码。 第一反应是字符集的问题,也尝试用修改字符集来解决问题,最终问题还是出在系统的环境变量上。
解决方法:
1. export 参数
$ export nls_lang=simplified chinese_china.zhs16gbk
2. 修改配置单数
修改。bash_profile 中的参数,添加相关信息
nls_lang=simplified chinese_china.zhs16gbk;
export nls_lang;
以上是在linux平台,windows 平台用
c nls_lang=simplified chinese_china.zhs16gbk
或者添加一个环境变量就可以了。
3. 补充一点知识:
nls_lang 是linux 系统的环境变量;
nls_language 是数据库的参数。
我们可以在session中修改nls_language,不能修改nls_lang。
示例:
sql alter session set nls_language= 'simplified chinese'
sql alter session set nls_lang=american_america.zhs16gbk;
alter session set nls_lang=american_america.zhs16gbk
error at line 1
ora-00922 missing or invalid option
oracle 的相关参数我们可以通过以下sql语句查看:
sql col parameter format a30
sql col value format a30
sql select from v$nls_parameters;
parameter value
------------------------------ ------------------------------
nls_language simplified chinese
nls_territory china
nls_currency ¥
nls_iso_currency china
nls_numeric_characters .,
nls_calendar gregorian
nls_date_format yyyy-mm-dd hh24miss
nls_date_language american
nls_characterset zhs16gbk
nls_sort binary
nls_time_format hh.mi.ssxff am
parameter value
------------------------------ ------------------------------
nls_timestamp_format dd-mon-rr hh.mi.ssxff am
nls_time_tz_format hh.mi.ssxff am tzr
nls_timestamp_tz_format dd-mon-rr hh.mi.ssxff am tzr
nls_dual_currency ¥
nls_nchar_characterset al16utf16
nls_comp binary
nls_length_semantics byte
nls_nchar_conv_excp false
已选择19行。
,