社区
基础和管理
帖子详情
数据库导入中的字符集转换问题?请教
snake1122
2004-01-14 10:37:48
日文系统下的Oracle9导出数据,导入中文Oracle9出现错误:不支持要求的字符集转换(从类型832到852)—--IMP-00016,用Set NLS_LANG = simplified chinese_china.UTF8依然不好使,请教用什么办法才能导入数据?
...全文
84
10
打赏
收藏
数据库导入中的字符集转换问题?请教
日文系统下的Oracle9导出数据,导入中文Oracle9出现错误:不支持要求的字符集转换(从类型832到852)—--IMP-00016,用Set NLS_LANG = simplified chinese_china.UTF8依然不好使,请教用什么办法才能导入数据?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
baojianjun
2004-01-15
打赏
举报
回复
导出/导入与字符集
明白ORACLE多国语言设置,ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示、货币形式、排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的存储/显示等有效。ORACLE多国语言设置最主要的两个特性就是国家语言设置与字符集设置。国家语言设置决定了界面或提示使用的语言种类;字符集决定了数据库保存与字符集有关数据(如文本)的编码规则。正如上面的一个小例子,环境变量NLS_LANG的不同,导致EXP帮助发生变化,这就是多国语言设置的作用(NLS_LANG包含国家语言设置与字符集设置,这里起作用的是国家语言设置,而不是字符集)。
ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,字符集在创建数据库的时候设定,并保存在数据库props$表中,对于8i以上产品,已经可以采用“Alter database character set 字符集”来修改数据库的字符集,但也仅仅是从子集到超集。不要通过update props$来修改字符集,如果是不支持的转换,可能会失去所有与字符集有关的数据,就是支持的转换,也可能导致数据库的不正常工作。字符集分为单字节字符集与多字节字符集,US7ASCII就是典型的单字节字符集,在这种字符集中length=lengthb,而ZHS16GBK就是常用的双字节字符集,在这里lengthb=2*length。
客户端的字符集环境比较简单,主要是环境变量或注册表项NLS_LANG,注意NLS_LANG的优先级别为:参数文件à注册表à环境变量àalter sessionà函数。NLS_LANG的组成为“国家语言设置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客户端的字符集最好与数据库端一样(国家语言设置可以不一样,如zhs16gbk的字符集,客户端可以是nls_lang =simplified chinese_china.zhs16gbk或Ameircan_America.zhs16gbk,都不影响数据库字符的正常显示),如果字符集不一样,而且字符集的转换也不兼容,那么客户端的数据存储/显示和导出/导入的与字符集有关的数据将都是乱码。
使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
852
把852转换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制与十六进制之间的转换,想明白其中的道理)
isaacchang
2004-01-15
打赏
举报
回复
同意楼上的。
zcs_1
2004-01-15
打赏
举报
回复
应该修改nls_lang。
那我建议你另外创建一个日文字符集的数据库,将数据导入到这个数据库中,然后用中文字符集的客户端连接上导出数据。
snake1122
2004-01-14
打赏
举报
回复
我这边字符集是UTF8,它的超集是什么?
lianhg
2004-01-14
打赏
举报
回复
http://expert.csdn.net/Expert/topic/2604/2604811.xml?temp=9.655398E-02
zcs_1
2004-01-14
打赏
举报
回复
select nls_charset_name(832) from dual;
NLS_CHAR
--------
JA16SJIS
select nls_charset_name(852) from dual;
NLS_CHAR
--------
ZHS16GBK
建议用中文的客户端连接日文字符集数据库导出数据,这样就可以导入到中文字符集数据库了。
snake1122
2004-01-14
打赏
举报
回复
用Janpanese_janpan_utf8也不好使
snake1122
2004-01-14
打赏
举报
回复
类型832是什么?852又是什么?从哪儿能找到他们相关的定义?
asp.net知识库
.NET 2.0
中
的字符串比较 小试ASP.NET 2.0的兼容性 为 asp.net 2.0 的菜单控件增加 target 属性 ASP.NET 2.0 的内部变化 常见的 ASP.NET 2.0
转换
问题
和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1...
面试
中
的
数据库
问题
如何应对面试
中
的
数据库
问题
很多同学并不是
数据库
的专家,面试如果问到
数据库
并没有太多信心,面试
数据库
是有窍门的,因为
数据库
是一个庞大的系统,面试的时候没有办法考得很深,而且有一些题目是被反复问到的,...
BCP命令,
导入
导出CSV文件
关于bcp,因为每天都要从
数据库
中
导出大量的数据到本地,虽然不知道要干嘛...但对我来说也是个艰巨的任务。因为数据量太大,近亿的数据量,我也是初出茅庐,才知道一个公司长年积累的数据有多恐怖。随便一个sql就要...
oracle没有第二个定界字符串,
请教
:为什么我的ORACLE无法插入超过一定数量的字符串信息(怪)? - 第2页...
中
午时我照lizh的意见做了个测试,发现字段设置为VARCHAR2(4000),最多只允许输入1334个字符(666个汉字),也就是说我们这边ORACLE的
字符集
里,1个字符是作为3个字节来处理的。但当我将字段设置为VARCHAR2(2)时,系统...
易语言mysql乱码_分享一个解决MySQL写入
中
文乱码的方法
【编程语言:易语言】之前有发帖
请教
过如何解决MySQL写入
中
文乱码的
问题
。但没人会,或者是会的人不想回答。搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码
问题
搁浅了一个软件很多日子。直到昨天又一次...
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章