(转)论 LOAD 与 IMPORT 中的 codepage 转换

武翠霞, 软件工程师, IBM
刘安琼, 软件工程师, IBM
王勇, 软件工程师, IBM  

 

简介: 本文介绍了 DB2 中进行 LOAD, IMPORT 时可能的 codepage 转换,在 DB2 V9.7 中进行了一些实例分析,使大家能更清晰的了解 codepage 转换。

本文的标签:  关于产品, 管理, 调试, 迁移, 配置

 

 

发布日期: 2010 年 7 月 22 日 
级别: 初级 
访问情况 1174 次浏览 
建议: 1 (查看或添加评论)

1 star 2 stars 3 stars 4 stars 5 stars  平均分 (共 1 个评分 )

 

引言

在 DB2 中,LOAD 与 IMPORT 作为重要的导入数据的工具,有着很重要的作用。理想情况下,为了获得最佳性能,应用程序与从该应用程序调用的语句始终应使用相同的代码页。在一些场景中,我们需要导入一些和数据库本身的 codepage 不一致的数据,这个时候就需要 codepage 转换了。DB2 产品支持代码页转换,从而允许应用程序和数据库使用不同的代码页。那么什么是 codepage ? DB2 支持那些 codepage 转化? 如何进行 codepage 转换呢?

Codepage 介绍

计算机处理文本时,把一门语言中每个字符都赋以特定的值,这种字符与数值的对照表就叫 codepage( 代码页 ) 。例如 ASCII 就是把英文字母表和一些控制字符映射到一些特定的数值上去。

DB2 支持的 codepage 列表

关于 DB2 支持的 codepage 可以在 DB2 信息中心中查看:

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.nls.doc/doc/r0004565.html

在表中,每个 codepage 都有相对应的组,地域代码,代码集等。如果两个 codepage 属于同一个组,则它们可以互相转换,否则不可以互相转换。值得注意的是单字节(S)组可以转换成中性(N)组,双字节(D)组也可以转换为中性(N)组。但是 N 组不一定能转成 S 组,N 组也不一定成转成 D 组。

制造不同 CODEPAGE 数据的方式

制造不同 codepage 数据的方法有很多种。以下列出 4 种:

1. 使用 db2 export。DB2 本身 EXPORT 支持导出各种不同 codepage 的 DEL 格式的文件,例如导出 codepage 为 819 和 1386 的文件,如清单 1 所示。


清单 1. 导出 codepage 为 819 和 1386 的文件
				
 db2 "export to data819.del of del modified by codepage=819 
 select * from tab1"
 
 db2 "export to data1386.del of del modified by codepage=1386 
 select * from tab1"
 

注意 export 不能直接导出 asc 格式的文件。

2. 使用 UltraEdit 来编辑,先得到各种不同 codepage 数据的十六进制代码(可以从网上搜索或者 GVT 网站上查取),然后编辑保存就可以了。

例如: “你” 在 GBK(1386) 中是 X ’ C4E3 ’ , 在 UTF-8(1208)中是 X ’ E4BDA0 ’


图 1. 编辑‘你’的 GBK 代码
图 1. 编辑‘你’的 GBK 代码 

3. 使用 Windows 操作系统下的 Microsoft Word 来制作数据,方式如下

设置 –〉控制面板—〉区域和语言选项,设置你需要的语言,然后可以使用 WORD 来另存为纯文本,选择其它编码来指定其编码。

4. 使用 vi 来设置 fileencoding 来达到目的

例如准备 codepage 为 1208 的数据:

 set fileencoding=utf-8 
  


图 2. 设定 fileencoding
图 2. 设定 fileencoding 

提示:准备数字和字母这些比较方便,但是准备中文,日文等就不是很方便了。建议使用 UltraEdit 来准备这些诸如中文,日文语言的 codepage。

LOAD 与 IMPORT 不同转换方式

缺省情况下,LOAD 认为输入文件是用数据库代码页编码的,直接将文件转化为数据库 codepage 编码。如果输入文件不是以数据库 codepage 编码的,可以通过 codepage 修饰符来导入正确文件。而缺省情况下 DB2 IMPORT 实用程序认为输入文件中的数据是用当前系统的代码页编码的。当将数据文件导入到数据库时,DB2 会自动将数据文件从当前系统代码页转换成数据库代码页。如果输入文件不是当前系统的代码页编码的。也可以通过 codepage 修饰符来轻松导入正确文件。

所以一般来说,LOAD 直接把源数据的 codepage 转化为数据库的 codepage,而 IMPORT 则先将源数据的 codepage 转换为应用程序的 codepage,然后将应用程序的 codepage 再转换为数据库的 codepage。

LOAD 实例分析

这些例子都是在 DB2 V97 中实现的,以下实例用的是同一个数据库 db1386, 两个数据文件 data1386.del,data1208.del。

data1386.del 和 data1208.del 包含同样的数据第一列为 1,第二列为你,第三列为繜。但是编码方式不同。data1386.del 以 codepage 1386 编码,而 data1208 以 codepage 1208 编码。

字符GBK(1386) 代码点UTF-8(1208) 代码点
你X'C4E3'X'E4BDA0'
繜X'BF9F'X' E 7B99C'

Linux 上当前系统代码页可以通过 db2set db2codepage 来设置。另外需要 db2 terminate,使设置生效。

db codepage 是建 DB 时由 codeset,territory 决定的。例如:

 db2 create db db1386 using codeset GBK territory CN 
 

可以通过以下命令查看 db 的 codepage。

 db2 get db cfg for dbname |grep 'Database code page'
  

数据 codepage 和 db codepage 一致时的 LOAD

缺省情况下 LOAD 认为数据 codepage 和 db codepage 一致,在这个例子中,导入成功。


清单 2. LOAD 清单 1
				
 db2 create db db1386 using codeset GBK territory CN 
 db2set db2codepage=1386 
 db2 terminate 
 db2 connect to db1386 
 db2 "create table t1(a int, b varchar(7),c varchar(10))"
 db2 load from data1386.del of del replace into t1 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 3 所示。


图 3. 查询结果 1
图 3. 查询结果 1 

数据 codepage 和 db codepage 不一致时的 LOAD

这个例子属于不正确的 LOAD,没有做 codepage 转换,data1208.del 被当成 db codepage 编码存进了 db。


清单 3. LOAD 清单 2
				
 db2set db2codepage=1386 
 db2 terminate 
 db2 connect to db1386 
 db2 load from data1208.del of del replace into t1 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 4 所示。


图 4. 查询结果 2
图 4. 查询结果 2 

LOAD 时数据 codepage 不会转成应用程序的 codepage

data1208.del 不会转成应用程序的 codepage,而是直接当成 db codepage 编码存进 db。


清单 4. LOAD 清单 3
				
 db2set db2codepage=1208 
 db2 terminate 
 db2 connect to db1386 
 db2 load from data1208.del of del replace into t1 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 5 所示。


图 5. 查询结果 3
图 5. 查询结果 3 

数据 codepage 和 db codepage 不一致时正确的 LOAD

在这种情况下正确的 load,数据的 codepage 和 modified by codepage 一致,如清单 5 所示。


清单 5. LOAD 清单 4
				
 db2set db2codepage=1208 
 db2 terminate
 db2 connect to db1386 
 db2 load from data1208.del of del modified by codepage=1208 
 replace into t1
 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 6 所示。


图 6. 查询结果 4
图 6. 查询结果 4 

LMPORT 实例分析

以下例子所用数据同上面 load 实例数据。

数据 codepage 和应用程序 codepage, db codepage 一致时的 IMPORT

缺省情况下认为应用程序 codepage 就是数据的 codepage。


清单 6. IMPORT 清单 1
				
 db2set db2codepage=1386 
 db2 terminate 
 db2 connect to db1386 
 db2 import from data1386.del of del replace into t1 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 7 所示。


图 7. 查询结果 5
图 7. 查询结果 5 

数据 codepage 和应用程序 codepage 一致 , 但和 db codepage 不一致时的 IMPORT

缺省情况下认为应用程序 codepage 就是数据的 codepage,可以正确的导入。


清单 7. IMPORT 清单 2
				
 db2set db2codepage=1208 
 db2 terminate 
 db2 connect to db1386 
 db2 import from data1208.del of del replace into t1 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 8 所示。


图 8. 查询结果 6
图 8. 查询结果 6 

数据 codepage 和应用程序 codepage 不一致时利用 modified by codepage 成功实现 import 的 codepage 转换


清单 8. IMPORT 清单 3
				
 db2set db2codepage=1386 
 db2 terminate 
 db2 connect to db1386 
 db2 import from data1208.del of del modified by codepage=1208 
 replace into t1 
 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 9 所示。


图 9. 查询结果 7
图 9. 查询结果 7 

数据 codepage 和应用程序 codepage 不一致时不正确的 import,没有实现 codepage 转换

把 data1208.del 当成应用程序 codepage 1386 编码的,数据库 codepage 也是 1386,不进行 codepage 转换。


清单 9. IMPORT 清单 4
				
 db2set db2codepage=1386 
 db2 terminate 
 db2 connect to db1386 
 db2 import from data1208.del of del replace into t1 
 db2 "select hex(b) as b ,hex(c) as c from t1"
  

结果如图 10 所示。


图 10. 查询结果 8    
图 10. 查询结果 8     

结束语

本文介绍了 LOAD,IMPORT 在不同情况下的 codepage 转换,以便使用户更好的理解 codepage 转换。


参考资料

学习

获得产品和技术

  • 使用可直接从 developerWorks 下载的 IBM 产品评估试用软件 构建您的下一个开发项目。

  • 现在可以免费使用 DB2。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。

讨论

SAP PP工艺路线Routing保姆级配置指南:从CA01创建到替代/并行顺序实战 本文详细解析SAP PP模块中工艺路线(Routing)的配置与应用,从基础创建(CA01)到高级功能如替代顺序和并行顺序的实战操作。通过真实案例演示,帮助用户掌握SAP PP工艺路线的精细化管理,提升生产流程效率。 阅读详情

相关推荐

RDD2022 数据格式转换与清洗

Rdd2022数据集,是关于道路损伤的数据集,与rdd2020相比增加了两万多张图片但是由于格式不能被yolo直接使用且其中有大量的图片没有符合要求的标注,特写此文章记录数据清洗与格式化的过程。

蓝胖子的博客 9949

论 LOAD 与 IMPORT 中的 codepage 转换

武翠霞, 软件工程师, IBM 刘安琼, 软件工程师, IBM 王勇, 软件工程师, IBM   简介:本文介绍了 DB2 中进行 LOAD, IMPORT 时可能的 codepage 转换,在 D...

243

【电路设计】带阻滤波器实战:从理论到Twin-T陷波电路实现

本文详细介绍了带阻滤波器的原理与Twin-T陷波电路的实战应用,从基础概念到工程实现全面解析。通过具体案例展示如何设计高Q值滤波器,解决电源噪声等实际问题,并分享PCB布局和元件选型的实用技巧,助力工程师提升电路设计能力。

gg901的博客 1011

DB2 EXPORT 和 IMPORT命令

 db2导出与导入说明Export导出过程db2 ? exportEXPORT TO filename OF {IXF | DEL | WSF}[LOBS TO lob-path [ {,lob-path} ... ] ][LOBFILE lob-file [ {,lob-file} ... ] [MODIFIED BY {filetype-mod ...}][METHOD N ( colum

zouzhongfan的专栏 4万+

DDR5内存调优实战:手把手教你搞定Write Leveling Training Mode(附时序图解析)

本文深入解析DDR5内存调优中的Write Leveling Training Mode技术,详细介绍了其核心原理、硬件准备、实战步骤及常见问题解决方案。通过JESD79-5标准定义的反馈机制,帮助硬件工程师精确对齐DQS与CK信号,提升系统稳定性和数据可靠性。附有时序图解析和代码示例,适合DDR5内存系统设计与调试参考。

weixin_29256771的博客 550

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第二节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去掉电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 6026

在使用load命令向数据库中导入表时,数据中的中文可能显示为乱码。

在使用load命令向数据库中导入表时,数据中的中文可能显示为乱码。 例: db2 load from A_MENUFOLDER.del of del insert into A_MENUFOLDER A_MENUFOLDER表中的中文字符显示为乱码。 解决方法: 使用load命令时加入codepage选项。 例: [color=red] db2 load f...

zscomehuyue的专栏 333

uniapp APP端:蓝牙报错writeBLECharacteristicValue:fail property not support(uni.writeBLECharacteristicVal)

uni-app 蓝牙fail property not support、发现不了服务特征值的问题、突然发现微信蓝牙小秘密,使用uni-app编译成安卓APP后报错writeBLECharacteristicValue:fail property not support,发现不了服务特征值,uniApp APP调用蓝牙API发送指令过快导致,uniapp 蓝牙 writeBLECharacteristicValue property_not_support iOS Android BLE GATT 特征值写入

✅ 精选推荐文章 2943

db2codepage=1386

这是客户端设置。 设置了1396,则使用export到处的del文件是GBK格式的。

MyDriverC 5595

已解决“TimeouEror [WinEror 10060由于连接方在一段时间后没有正确答复 或连接的主机没有反应,连接尝试失败“,亲测有效!!!

已解决"TimeouEror [WinEror 10060由于连接方在一段时间后没有正确答复 或连接的主机没有反应,连接尝试失败",亲测有效!!!

wbajsjhhhhh的博客 1万+

使用Visual Studio 2022创建CUDA编程项目

本文介绍了在Visual Studio 2022中配置CUDA开发环境的完整流程。首先需要安装VS2022并勾选C++开发组件,然后安装CUDA Toolkit和兼容的NVIDIA驱动。创建项目时选择CUDA模板,VS会自动生成数组相加的示例代码。项目配置包含CUDA头文件依赖和链接器设置(cudart_static.lib)。文章详细说明了从环境搭建到代码编写、调试的完整步骤,帮助开发者快速上手CUDA编程。

新兴IT民工的专栏 1万+

db2 import 文件后表中中文乱码问题

db2 import 文件到数据库中发现中文乱码,导出时没有做其他设置,应该是导出服务器和导入服务器之间的codepage差异,导入时指定codepage就可以了 db2 import from filename.del of del modified by codepage=1208 rcommitcount 100000 eplace into table_name ...

weixin_44269948的博客 3420

置顶必读(3) |《滚雪球学SpringBoot》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 15万+

LOAD 与 IMPORT 中的 codepage 转换

在 DB2 中,LOAD 与 IMPORT 作为重要的导入数据的工具,有着很重要的作用。理想情况下,为了获得最佳性能,应用程序与从该应用程序调用的语句始终应使用相同的代码页。在一些场景中,我们需要导入一些和数据库本身的 codepage 不一致的数据,这个时候就需要 codepage 转换了。DB2 产品支持代码页转换,从而允许应用程序和数据库使用不同的代码页。那么什么是 codepage ? DB2 支持那些 codepage 转化? 如何进行 codepage 转换呢?

赔了命3000 697

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

DB2 load显示乱码/关于codepage

通常而言,db2的输出显示乱码,都是字符编码的问题。 查看数据库的编码集: [test@demo ~]$ db2 get db cfg for testdb|grep -i code Database code page                                      = 1208  Database code set                           ...

aryoyo的博客 8409

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

DB2 中LOAD和IMPORT的Codepage转换

在 DB2 中,LOAD 与 IMPORT 作为重要的导入数据的工具,有着很重要的作用。理想情况下,为了获得最佳性能,应用程序与从该应用程序调用的语句始终应使用相同的代码页。在一些场景中,我们需要导入一些和数据库本身的 codepage 不一致的数据,这个时候就需要 codepage 转换了。DB2 产品支持代码页转换,从而允许应用程序和数据库使用不同的代码页。那么什么是 codepage ?

King's program process 8049

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

db2 codepage

首先分两个层面,DB2 CODEPAGE和OS CODEPAGE(DB2SET DB2CODEPAGE相当于设定了当前实例的OS的CODEPAGE)Linux系统查看CODEPAGE的方法:在终端输入localewindows查看CODEPAGE方法:在cmd.exe输入chcp,或者右键cmd.exe属性查看。如果DB2SET DB2CODEPAGE了,这个值的优先级比OS的CODEP...

weixin_30361641的博客 343

[ DB2 ] 如何避免在IMPORT/EXPORT中出现乱码和字符截断

Troubleshooting

知らない景色が見えるまで、足を動かすつづけよう。 2683

db2 导出换行_【DB2】文件导入导出常见命令总结 EXPORT IMPORT LOAD

Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!J当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。ASC:定长的ASCII文件,行按照行分割符分开,列定长。PC/IXF:只能用来在db2之间导...

weixin_39625098的博客 1326

【DB2】db2命令Export与Import

环境准备1.新建表qinys@Linux:~> db2 "create table tb1(id int,dt timestamp,name varchar(100))"; DB20000I  The SQL command completed successfully.2.插入数据qinys@Linux:~> db2 "insert into tb1 values(1,current...

weixin_34082695的博客 583

Db2 文件导入导出常见命令总结 EXPORT IMPORT LOAD

转载自 myfriend2010 51cto 上的 Db2 文件导入导出常见命令总结 Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!J 当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!  DEL:界定的ASCII文件,行分隔

南角影 2万+

aix mysql5.1 字符集_数据迁移过程中的字符集编码问题

数据迁移过程中,文件一落地就涉及到文件字符集编码问题。为保证正确的数据入库,几处与字符集相关的设置需要注意。1.首先是文件的字符集确认和转换。案例:有一个文件需要导入数据库,数据库编码为utf-8。文件中的字段分割符为“|”,在导入过程中指定1386(GBK)的话会报错,原因是“|”超出了字符定义范围;但是如果指定1208(utf-8)的话,虽然文件被顺利导入数据库,但是当查询的时候遇到中文会报错...

weixin_29765949的博客 564

【DB2】文件导入导出常见命令总结 EXPORT IMPORT LOAD

参考文献地址:https://blog.youkuaiyun.com/reaper1022/article/details/18601973Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!J当然在这以前,我觉得有必要提及一点关于导入导出基础的知识! DEL:界定的ASCII...

weixin_30480583的博客 239

db2 import export

WSF:工作表方式导入导出,这种格式的文件类型用的比较少。DB2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意下的。COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法,  例:Import from filename of del COMMITCOUNT 50000 insert i

weixin_36174866的博客 822
上一篇: (转)DB2导出数据库表结构和数据
下一篇: (转)find:根据指定条件查找文件
mlxia
博客等级 码龄26年 28粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值