楼主: biti_rainy

彻底弄清楚字符集问题

[复制链接]
论坛徽章:
21
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:18
11#
发表于 2002-1-26 16:57 | 只看该作者
原来说要解一篇文章的,一直没有写完,很是不好意思。

我的了解:
1。数据库的字符集是存在sys.props$这个表的里面的。通过直接update 就可以修改字符集。不过不受oracle的支持。
2。别的视图都只是反映这个字符集。或者是Client的字符集环境。
3。数据库的字符集是在create database的时候指定的。不允许改变。官方的改变是只能有us7ascii到他的超级可以改。别的都不支持。
4。exp/imp是和字符集最相关的地方。别的其实都问题不大。

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-08-03 16:09:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
12#
发表于 2002-1-26 19:34 | 只看该作者
了解ORACLE的NLS
ORACLE SERVER NLS ARCHITECTURE
ORACLE 的支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
参数设置决定了个体常规的行为。
LOCALE-INDEPENDENT OPERATION
ORACLE使用运行时间库来实现支持国家语言的体系结构。这NLS提供了
一套综合的与语言无关的函数,它允许适当的文本和字符处理以及语言的常规
操作。这些函数在运行时标识和载入一套本地专用的数据来管理专门的语言和地区。这些本地专用的数据存储在环境变量ORA_NLS*所指定的目录中。对每一个新版本,ORA_NLS数据目录都用一个不同的对应。在ORACLE8I中为ORA_NLS33。在UNIT平台中ORA_NLS33变量被设置为$ORACLE_HOME/ocommon/nls/admin/data。在WIN32平台中当一个ORACLE_HOME刚好对应一个ORACLE版本时这默认设置将工作的很好。如果你的数据库运行一多版本的ORACLE环境中,你必须确保设置适当的NLS_ORA*对应有效版本的NLS数据文件。
使用一个引导文件来决定有效的NLS对象的载入。ORACLE支持系统和用户的引导文件。这用户引导文件使你能灵活的定制数据库的有效的NLS本地对象。因此帮助你控制内存消耗。也能添加新的本地化数据并且定制一些本地化数据的组成。
CLIENT/SERVER ARCHITACTURE
   ORACLE8I由客户/服务体系结构组成。与语言相关的操作在客户和服务端都由一个参数和环境变量来控制。在服务器上每一个开始的会话,在客户方都可能有相同或不同的本地环境,并且有着相同或不同的规定的语言需求。数据库建立时也有一套会话无关的规定的NLS参数。包括数据库和国家字符集。他们规定在数据库中使用字符集存储文本数据。其他参数,如语言和地区,在检查约束的估计是使用。
   当客户和服务规定了不同的字符集时,ORACLE将自动控制字符串的常规字符集。
   就ORACLE的体系结构而言,所有应用,甚至那些运行在相同机器上的ORACLE实例,客户机要被考虑。例如,SQL*PLUS开始,被一个拥有ORACLE软件的UNIX用户使用RDBMS软件通过指定ORACLE_SID的适配器,它仍然作为客户端并且其行为由客户端的NLS参数确定。
   当一个应用被开始时,它从环境设置中初始化客户的NLS环境,使用这些设置所有NLS执行局部性的被完成。
当应用连接到数据库时,一个会话在服务器上被建立。这新的会话初始化它的NLS环境使用在初始化参数文件中规定的NLS初始化参数。那些设置之后能被ALTER SESSION语句改变。这些语句仅仅改变NLS环境,它不能改变本地客户的NLS环境。这些会话改变在服务器上可以使用SQL或PL/SQL语句来执行。
紧跟着连接,如果这些NLS环境设置在客户端被定义,那么一个隐含的ALTER SESSION语句同步客户和会话的环境。

  NSL_LANG包括三个部分(语言,地区,字符集)。
语言:规定ORACLE消息,校验,日期命名
地区:规定默认日期,货币和数字格式
字符集:规定客户应用

以上是我照oracle的文档译的,可能有些地方不够准确。请大家多评论!。。。。谢谢

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
13#
发表于 2002-1-26 19:35 | 只看该作者
那我问一个问题:
我exp一个zht16big5(繁体),然后我用工具把它里面的繁体字转成简体,再imp到另一个为zhs16gbk(简体)的库当中,具体该怎么操作呢??

使用道具 举报

回复
论坛徽章:
21
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:18
14#
发表于 2002-1-26 19:44 | 只看该作者
最初由 bluebluestar 发布
[B]那我问一个问题:
然后我用工具把它里面的繁体字转成简体,[/B]


直接编辑dmp文件?
建议还是spool出来,然后用工具转换,最后在用sqlldr到回去比较合适?

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-08-03 16:09:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
15#
发表于 2002-1-26 19:46 | 只看该作者
请教你是用什么工具把exp导出的文件中的繁体字转成简体

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-08-03 16:09:45ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
16#
发表于 2002-1-26 19:56 | 只看该作者
最初由 chao_ping 发布
[B]

直接编辑dmp文件?
建议还是spool出来,然后用工具转换,最后在用sqlldr到回去比较合适? [/B]

能说详细点吗?

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
17#
发表于 2002-1-26 20:32 | 只看该作者
我当时就是随便搜索了一个工具,现在不记得了,是直接转.dmp文件的,由于是直接读2进制,所以转换的时候会出错,把不是文字的东西也转掉了,这个问题我还是不清楚,大家都是用什么工具的呀?详细点说说,谢谢了!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
18#
发表于 2002-1-27 10:53 | 只看该作者

一个测试

原有的数据库,它的NLS_LANG="Simplified chinese_china.zhs16cgb231280"
SQL> select * from v$nls_parameters;

PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                  CHINA
NLS_CURRENCY                   RMB
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_CHARACTERSET               ZHS16CGB231280
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 TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZH:T
                               ZM

NLS_DUAL_CURRENCY              RMB
NLS_NCHAR_CHARACTERSET         ZHS16CGB231280
NLS_COMP                       BINARY

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
19#
发表于 2002-1-27 10:54 | 只看该作者
然后,修改操作系统中的NLS_LANG="american_america.us7ascii"
SQL> select * from v$nls_parameters;

PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_CHARACTERSET               ZHS16CGB231280
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 TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZH:T
                               ZM

NLS_DUAL_CURRENCY              $
NLS_NCHAR_CHARACTERSET         ZHS16CGB231280
NLS_COMP                       BINARY

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
20#
发表于 2002-1-27 11:12 | 只看该作者
在sys.props$中,参数
NLS_ISO_CURRENCY               AMERICA
NLS_CHARACTERSET               ZHS16CGB231280
NLS_NCHAR_CHARACTERSET         ZHS16CGB231280
而在v$nls_parameters中,
NLS_LANGUAGE                   SIMPLIFIED CHINESE
NLS_TERRITORY                  CHINA
NLS_CURRENCY                   RMB
NLS_ISO_CURRENCY               CHINA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              SIMPLIFIED CHINESE
NLS_CHARACTERSET               ZHS16CGB231280
这样是不是说,操作系统中的NLS_LANG参数与v$nls_parameters中对应呢?如果是这样,那么,sys.props$中的nls_iso_currentcy等参数又是做什么的呢?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表