oracle字符集问题

主要参考文档:http://www.itpub.net/thread-933964-1-1.html

 

系统   ---------------  客户端 -----------------------数据库

Local               nls_language            nls_characterseetnls_nchar_characterset

首先应该区分字符集跟语言国家选项这两个概念,字符集是编码方式,语言国家选项是显示的字符。有些编码支持多国语言,有些编码只对某一国语言进行支持。具体区分自己查资料吧。

常用的字符集

<language><bit size><enconding>

ZHS16GBK

ZHS16CGB231280

AL32UTF8

AL16UTF16

语言跟国家选项

AMERICAN_AMERICA

SIMPLIFIED CHINESE_CHINA

查看字符集的方法

Linux使用/etc/lsysconfig/i18n文件存放字符集国家设置信息。

客户端通过nls_language参数去区分字符集

数据库字符集可以登录进入数据库执行以下语句

Select * from nls_database_parameters where parameter like ‘%CHARACTERSET%’查看。

查询结果类似于

PARAMETER                      VALUE

------------------------------ ------------------------------

NLS_CHARACTERSET               ZHS16GBK

NLS_NCHAR_CHARACTERSET         AL16UTF16

其中NLS_CHARACTERSET为普通字符集,NLS_NCHAR_CHARACTERSET为国家字符集。

普通字符的转化发生在客户端。

NLS_LANGUAGE环境变量未设置,则客户端的字符集取决于操作系统。与操作系统一致。当用户在应用端发生操作,客户端首先检查当前客户端的字符集是否与数据库的字符集一致,若一致,则直接将数据传送至服务器。若不一致,则会在客户端进行字符集的转换,把当前编码转换成数据库服务器字符集对应的编码后,再将编码信息上传到服务器。

而对于国家字符集,

客户端本身并不区分该字段是否为国家字符集类型,它仅是把该字符当做普通字符进行转化处理,上传至服务器,在服务器端,服务器根据其是否是国家字符集类型进行再次转换,即将国家字符集类型的字符将其从普通字符集编码转化为国家字符集编码。

在查询时,

服务器直接将存储在服务器端的编码原样返回,然后,客户端根据环境变量中的nls_langnls_nchar参数,判断是否要对返回的编码进行转化。若客户端没有设置nls_nchar参数,则认为其与nls_lang一样,不进行转化。

最后,在利用exportimport工具进行导入导出时,这两个本身也是客户端工具,他们会根据nls_langnls_nchar参数进行转换,然后将此事的环境参数写入导出文件中,在导入的时候,会对比导入客户端中的字符集与导出文件中的字符集是否一致,若不一致,则先进行转化,然后再按照一般过程导入到服务端。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值