查看文章
 
oracle字符集的转换
2010-03-20 14:55

转换前要搞清楚的

1.在Oracle9i中,如果数据库存在CLOB类型字段,那么就不允许利用ALTER DATABASE CHARACTER SET对字符集进行转换

2 a字符集转为b字符集b应该是a字符集的超级,否则的话转换肯定会丢失数据!需要特殊处

3 Oracle 的语言和字符集设定分为两部分,服务器端的字符,客户端的字符集。
当你在本机利用sqlplus连接oracle服务器时sqlplus也被看做是客户端!
客户端采用何种字符集处理数据是由注册表中的NLS_LANG参数决定的,如果这个参数为空,则客户端根据服务器端相应参数来(nls_instance_parameters)处理字符集,

4 NLS_LANG=<Language>_<Territory>.<Clients Characterset

NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页
或者对于unicode应用设置为UTF8
在Windows上查看当前系统的代码页可以使用chcp命令:

如果进行从WE8MSWIN1252到UTF8的转换
1)使用NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252导出数据库。
这时创建的导出文件包含WE8MSWIN1252的数据
2)导入时使用NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
这时转换仅发生在insert数据到UTF8的数据库中(这一步是oracle自动转换的)。

导入的转换过程

1.确定导出数据库字符集环境
通过读取导出文件头,可以获得导出文件的字符集设置
2.确定导入session的字符集,即导入Session使用的NLS_LANG环境变量
3.IMP读取导出文件
读取导出文件字符集ID,和导入进程的NLS_LANG进行比较
4.如果导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换
如果不同,就需要把数据转换为导入Session使用的字符集。
然而这种转换只能在单byte字符集之间进行。

不要利用 ALTER DATABASE CHARACTER SET 来更还字符集,这个命令不会对已有数据进行转换,只是影响以后的数据。而且问题多多,只有一种好的方式那就是重建database   、exp、imp!!

这里是eygle的帖子,讲的很清楚

http://www.eygle.com/special/NLS_CHARACTER_SET_04.htm


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(265)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu