楼主: liyubo

给大家出一个难题,不知道坛子里有没有高手

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2006-9-20 22:54 | 只看该作者
最初由 ZALBB 发布
[B]

抱歉,我只测试汉字是否可以转换的情况,法语没测试。
条件大致是这样的:9205, WINDOWS2003。
源数据库为:ZHS16GBK
目标数据库位:WE9ISO8859P1

两个数据库都在同一个服务器上,测试的DMP文件里包含汉字,
在测试过程中,做了两步工作:
1、确认导出没问题。导回源库OK。
2、导入目标数据库后,没报任何异常,汉字正常显示。 [/B]


其实如果你从WE9ISO8859P1导入到ZHS16GBK,也有可能遇到和我一样的问题,特别当有些域的数据(非ASCII)已经接近4000的限制的时候。如果只是测试了一个试验数据库,由于数据很小,可能不会遇到问题。

你试一下源库是WE9ISO8859P1,然后建立一个域,用VARCHAR2(4000)定义,然后输入一个包含法文(或其它非ASCII字符)的数据,并且数据的长度接近4000,例如3999等。自己手工计算一下,确保非ASCII字符数double后,总长度会超过4000。然后dmp出来,再导入到字符集为UTF8或ZHS16GBK的目标数据库,看看是否会出错。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
12#
发表于 2006-9-21 08:22 | 只看该作者
1、到哪去找法文?
2、可以更改字段类型的属性,把原来按照字节计算的长度改为按照字符,可保证
导入后不超出数据类型的长度。

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2006-9-23 05:32 | 只看该作者
最初由 ZALBB 发布
[B]1、到哪去找法文?
2、可以更改字段类型的属性,把原来按照字节计算的长度改为按照字符,可保证
导入后不超出数据类型的长度。 [/B]


2. 问题就在这里,Oracle10g里面对于VARCHAR2域的限制就是4000个byte,无论你的字符段属性是CHAR还是BYTE,这个4000的限制都是一样,就是4000个BYTE。

据各例子。当用UTF8时候,如果你所有的字符CHAR都是占2个byte的话,你总共能够输入的字符就只能是4000/2 =  2000个CHAR,而不是4000的CHAR。不论你的字符段属性是CHAR还是BYTE。

现在,法文字符在WE8ISO8859P1中占1个BYTE,到了UTF8中,就要占2个BYTE。问题就出现了。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
14#
发表于 2006-9-29 11:00 | 只看该作者
最初由 liyubo 发布
[B]

2. 问题就在这里,Oracle10g里面对于VARCHAR2域的限制就是4000个byte,无论你的字符段属性是CHAR还是BYTE,这个4000的限制都是一样,就是4000个BYTE。

据各例子。当用UTF8时候,如果你所有的字符CHAR都是占2个byte的话,你总共能够输入的字符就只能是4000/2 =  2000个CHAR,而不是4000的CHAR。不论你的字符段属性是CHAR还是BYTE。

现在,法文字符在WE8ISO8859P1中占1个BYTE,到了UTF8中,就要占2个BYTE。问题就出现了。 [/B]


那你先导入表结构,然后再把这类字段类型改为CLOB,最后再导入数据库。

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
15#
发表于 2006-9-29 17:05 | 只看该作者
最初由 ZALBB 发布
[B]

笔记还在整理之中,晚些时候再贴出。 [/B]



I am waiting.......

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2006-09-30 14:30:13ITPUB元老
日期:2006-10-01 06:07:56会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
16#
发表于 2006-9-30 11:34 | 只看该作者
UP

使用道具 举报

回复
论坛徽章:
18
ITPUB元老
日期:2005-02-28 12:57:002010新春纪念徽章
日期:2010-03-01 11:20:00
17#
发表于 2006-10-23 15:42 | 只看该作者
关注中...

使用道具 举报

回复
论坛徽章:
19
授权会员
日期:2005-10-30 17:05:33马上有对象
日期: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:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
18#
发表于 2006-10-24 16:59 | 只看该作者

Re: 给大家出一个难题,不知道坛子里有没有高手

Two Suggestions:

S1.  Doing  a  full  database  export  and  
import   is  a proper  approach  to  covert  all  data  to  new  character set.

S2. Use  CSALTER  Script  when  migrating
  
Note: This can  be used only under  following condition:
      
   The  database character set  itself  and
    all  of  its  schema  data  must  be  a  
     strict  subset  of  the  new  character  set.

因为WE8ISO8859 与AL32UTF8 本身没有从属关系,因此
可以略过.[/COLOR]

   
    .  CLOB columns (Not  include those which belong  to  data  dictionary and  sample schemas) that created by user  should  be  first  exported  or dropped  from  schema before  this script  run.

So, I think you need to check data first,
As you pointed out, the column size of "varchar2" data type is a problematic
area, You may need to convert data type
of some columns first.

Secondly, please be carefully to set
correct NLS_LANG parameter before export
and import, which may cause corrupted data generated.


最初由 liyubo 发布
[B]是一个字符集问题

原数据库是8i, 字符集是WE8ISO8859P1。数据库中含有大量法语和英语数据。

新的数据库是10g,字符集用AL32UTF8。请问能够无损转换全部的数据吗? [/B]

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
19#
发表于 2006-10-25 10:55 | 只看该作者
你可以把涉及到clob,或者你认为在字符集转换后出错的表先导出,然后把这些表drop掉,这个时候再次的exp出来,根据你现在需要的字符集,建新的db,,然后imp,这些步骤好了后,然后再处理有关clob,或者涉及法文的表

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2006-10-25 22:34 | 只看该作者

使用道具 举报

回复

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

本版积分规则 发表回复

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