楼主: biti_rainy

彻底弄清楚字符集问题

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
21#
发表于 2002-1-27 14:46 | 只看该作者

Simplified C to Traditional C

According to Oracle 8.1.7 readme.txt in rdbms\doc
---------------------------
18.6 SIMPLIFIED AND TRADITIONAL CHINESE CONVERSIONS
---------------------------------------------------

This feature offers support for Simplified and Traditional Chinese
conversions, by enabling you to view Simplified Chinese data on Traditional
Chinese clients and Traditional Chinese data on Simplified Chinese clients
regardless of the type of Chinese data (Traditional or Simplified) being
stored in the database. This is performed by mapping individual Chinese
characters to their counter parts in Traditional and Simplified forms.
However, transformation mappings are not possible/available for all Chinese
characters, hence replacement characters may still exist for some cases.

In prior releases, without this mapping, Simplified and Traditional forms
of Chinese characters that have separate encoding in Unicode will result in
a mapping to the '?' character. With this new conversion, loss of
information is minimized.

Please note that the conversions are done on aper-character basis, context
may be lost during the character transformations. For example, one
Simplified Chinese character may correspond to two or more Traditional
Chinese characters. Normally only one of these is the correct one depending
on the context. Oracle provides one to one mapping from one Simplified
Chinese character to one Traditional Chinese character and vice versa only
, so in some cases the meaning of the words could be nonsensical.

Remark
I haven't tested this feature 'cause I haven't the environment.
Can anybody test it?

使用道具 举报

回复
论坛徽章:
0
22#
发表于 2002-1-27 22:45 | 只看该作者
我觉得你用”工具“把繁体转换成简体,不能改变DMP文件中的字符集信息,仍是big5,导入时仍会出错。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
23#
发表于 2002-1-28 10:23 | 只看该作者
根据oracle的说法,一旦创建数据库时选定的字符集,就不能再改变了,除非重建数据库。真的是这样吗?我现有一个ORACLE817 for Solaris 8的需要将字符集从ZHS231280改成ZHS16GBK,该如何做?什么字符集最全,请推荐。

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
24#
发表于 2002-1-28 11:52 | 只看该作者
最初由 fenny 发布
[B]我觉得你用”工具“把繁体转换成简体,不能改变DMP文件中的字符集信息,仍是big5,导入时仍会出错。 [/B]


应该不是这个问题,我在imp之前把DMP文件的前3码改了,改成简体的了!

使用道具 举报

回复
论坛徽章:
20
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
25#
发表于 2002-1-30 09:27 | 只看该作者
最初由 fenny 发布
[B]我觉得你用”工具“把繁体转换成简体,不能改变DMP文件中的字符集信息,仍是big5,导入时仍会出错。 [/B]


如果能用工具将繁体转换为简体,那么应该也能够改变字符集的信息。
根据matalink上的一篇文章,dmp文件的二、三字节就是字符集对应的编码信息,那我是不是可以考虑修改这两个字节的对应码?
我没有实际这样转换过,不知道这样的想法对不对?

Name            ID
----------------------
US7ASCII 0x0001
WE8DEC  0x0002
WE8ISO8859P1 0x001f
EE8ISO8859P2 0x0020
SE8ISO8859P3 0x0021
NE8ISO8850P4 0x0022
CL8ISO8859P5 0x0023
AR8ISO8859P6 0x0024
EL8ISO8859P7 0x0025
IW8ISO8859P8 0x0026
WE8ISO8859P9 0x0027
TH8TISASCII 0x0029
WE8ROMAN8 0x0005
WE8PC850 0x000a
US8PC437 0x0004
EE8PC852 0x0096
EE8MSWIN1250    0x00aa
CL8MSWIN1251    0x00ab
EL8MSWIN1253    0x00ae
WE8MSWIN1252    0x00b2
JA16EUC  0x033e
JA16SJIS 0x0340
ZHT16BIG5 0x0361

只有这一部分的对应码。
请问什么资料里面有比较全一些的吗?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
26#
发表于 2002-1-30 10:55 | 只看该作者
我的一点理解(不知是否正确):
我认为字符级可能要分几级:
1。数据库级
这一层应该是数据的直接存储,在创建数据库时确定,基表是sys.props$,可以通过视图nls_database_parameters查询。可以从子集向超集修改。
2。instance级
这一层可以通过initSID.ora中设置nls_language来确定,可以通过V$nls_parameters来查询
3。session级
这一层可以通过
alter session set nls_language=。。。来修改,v$parameters
4。statement级
TO_CHAR(hiredate, 'DD/MON/YYYY', 'nls_date_language = FRENCH')
。。。。
仅个人观点,时间有限,以后在研究。。。。

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2002-1-31 13:09 | 只看该作者
不好意思,我说两句。我是个初学者,但前一段时间我也被数据库间不同的字符集搞的头昏脑涨。我说一下我们的情况:

开始:NT+ORACLE8I
后来:LINUIX+ORACLE9I

我把8I里的数据导入9I时,就出现问题了。

8I的字符集为:NLS_CHARACTERSET: ZHS16GBK ; NLS_NCHAR_CHARACTERSET : ZHS16GBK

我先检查了一下9I的数据库:随便打开一个表,直接往里写中文,然后应用,发现表中中文马上就变成了问号。我个人认为,这就是因为数据库本身的字符集不支持中文。然后我就查看了props$表,发现里面的NLS_CHARACTERSET 和 NLS_NCHAR_CHARACTERSET 的值分别是:US7ASCII 和 AL16UTF16 ,照我看上面几位的发言,US7ASCII是ZHS16GBK的子集,那8I里导出的数据,在9I里应该是不支持的。

于是,我就修改了表props$ (update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET'  和 update props$ set value$='ZHS16GBK' where name='NLS_NCHAR_CHARACTERSET'); 修改完该表后,要重新启动一下实例,才能生效(启动实例后,V$NLS_PARAMETERS 中的内容就改来和props$一样了。在没重新启动前,V$NLS_PARAMETERS 中内容不变,所以,我觉得视图V$NLS_PARAMETERS 是跟着props$变的。)然后,再将8I中的数据重新导入一次,就OK拉。

**修改表props$要用sys用户作为sysdba登录。

我试过几次,都很成功。我觉得真正去操作过,心里会比较明白一点。我前天把我们的9I数据库搞坏了,我焦头烂额了两天,后来终于想到一个比较不那么麻烦的办法搞好了,我觉得我从这次破坏中又学到了很多东西,所以大家不要怕破坏(当然数据库中的数据一定要备份好)。

另:补充一句,我觉得9I的数据库被改了表,那是针对实例改的。今天我们删掉了被我弄坏的9I中的实例,又重新建了一个,我去导数据时,又出现中文问题(以前已经改过的),我又去改了一遍,再导一遍才好的。我个人认为,要从根本上决定数据库的字符集,可能跟操作系统有关,和装的时候设置有关,这我就不懂了。希望懂的人来解释一下。

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
28#
发表于 2002-2-1 13:24 | 只看该作者

新问题

环境1: WinNt4 (English Version ) + Oracle 805
环境2: Win2000(Chinese Version ) + Oracle 805

在1下面建立数据库,其中的数据用中文的98进行插入,中文数据显示正常;
把1中的数据库拷贝到2的环境中,并建立instance ,数据库正常启动;在win2000 (Chinese Version)下面,数据正常,但到中文win98的下面,所有的汉字就变成了??

为什么?怎么解决?

另:
[B][I]
NLS_LANGUAGE        AMERICAN       
NLS_TERRITORY        AMERICA       
NLS_CURRENCY        $       
NLS_ISO_CURRENCY        AMERICA       
NLS_NUMERIC_CHARACTERS        .,
NLS_CALENDAR        GREGORIAN
NLS_DATE_FORMAT        DD-MON-YY       
NLS_DATE_LANGUAGE        AMERICAN       
NLS_CHARACTERSET        ZHS16GBK       
NLS_SORT        BINARY       
NLS_NCHAR_CHARACTERSET        ZHS16GBK       
[/I][/B]

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
29#
发表于 2002-2-1 16:51 | 只看该作者

Re: o

最初由 biti_rainy 发布
[B]按照guo的说法
nls_database_parameters是跟随props而变化的么?
他们都应该是实际的表,我觉得不应该立即有相应变化
v$这种表应该是适时变化的,也是对应于props?
props是数据解释的用途,也是数据库最基础的字符集?
但我似乎觉得既然是解释用途,那么存储格式就应该不是它才对,那存储到底是什么呢

据说props修改后重新启动数据库后props会恢复到原状,是这样么?
如果这个说法成立
那我猜测可能是props是作为数据解释用途
nls_database_parameters则是存储数据库安装时选择的字符集,(是不可改变的?)
当数据库重新启动的时候则变为跟nls_database_parameters保持一致
而props的可修改就是为了有包含关系下的字符集的导入

那安装时候选择的字符集,在哪里可以查看出来呢(当前假设已经修改props)
如果数据库安装后存储格式不可更改,就一定有一个参数或者表应该是不可更改的 [/B]

update sys.props$ set  value$='ZHS16GBK'  where name = 'NLS_CHARACTERSET'
commit ;
重新启动之后,  是改变的.
不是恢复原来的状态.

使用道具 举报

回复
论坛徽章:
0
30#
发表于 2002-2-4 10:33 | 只看该作者

to xfeng

to xfeng:我按你的做法试了一次,是可以的,但你漏了一点,就是还必须修改环境变量,使其字符集与数据库修改后的字符集一致,导入时才不会出错。

另请教大家:zhs16gbk与zhs16cgb123820之间有无包含关系

使用道具 举报

回复

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

本版积分规则 发表回复

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