设为首页 收藏本站
查看: 1168|回复: 0

[经验分享] 【摘抄】DB2字符集问题

[复制链接]

尚未签到

发表于 2016-11-17 09:48:56 | 显示全部楼层 |阅读模式
  三个层次的字符集  

  在DB2数据库中,与字符集相关的问题主要有三个层次的字符集的设置,其中系统级别和实例级别的字符集可以根据需求进行修改,而数据库级别的数据集则必须在建库时确定。
  (1)操作系统 Locale:系统级别的代码页设置,决定应用程序的默认代码页;
  假如大家希望将 OS Locale 设置为中文,可以考虑下面的方法:
  UNIX:大家可以通过 export LANG=”zh_CN” 命令修改当前的 Locale 到中文;
  Windows:在“开始->设置->控制面板->区域选项”中进行对系统的语言设置进行选择;
  (2)DB2CODEPAGE:DB2 实例级别的代码页设置,它会影响DB2相关应用程序对代码页转换时做出代码页判定。
  大家可以通过 db2set DB2CODEPAEG= 命令将 DB2CODEPAGE 设置为你需要的字符集。
  (3)DATABASE CODEPAGE:DB2 数据库级别的代码页设置;必须在建库时进行设置。
  大家在创建数据库时必须指定需要的代码页:
  db2 "CREATE DATABASE dbname USING CODESET UTF-8 TERRITORY CN"
  注释:这条语句可用于创建指定区域为中国(CN)的 Unicode 数据库。

  客户端字符集

  db2的字符集是数据库上的特性,同一个实例下的数据库可以有各自不同的字符集,例如:
  create database testdb on ‘e:’ using codeset gbk territory cn with ‘baal”s test db’
  则会创建一个1386(cn)的数据库
  当客户端连接到数据库的时候,他们的字符集要相互兼容,否则就会报下边类似的错误:
  $ db2 connect to lord
SQL0332N  Character conversion from the source code page “819″ to the target
code page “1386″ is not supported.  SQLSTATE=57017
  上边的错误则说明server端的字符集是819的,而客户端的字符集是1386(cn)的,db2不能server端819的字符集转化为client端1386的字符集。解决这个问题的思想是将client端的字符集改为与server端兼容的:
  例如上例可以将client端字符集改为819或者1208(utf-8),步骤:
  $ db2set db2codepage=819               —–或者Unicode(UTF-8) 1208
$ db2set db2country=US
$ db2 terminate
$ db2stop force
$ db2start
  这样客户端的字符集就变为819活着1208,再连接就不会报错。

  其他说明

  对于中文,尽量使用GBK字符集,而不是UTF-8,因为后者一个汉字长度为3而不是2。





   1: create database ktzpdbusing codeset UTF8 territory cn create database ktzpdb using codeset UTF8 territory cn
  这样就把数据库或每张表的字符编码设为utf8了,当我们直接用mysql或db2自带的命令窗口去插入中文时,却不能插入,这就是命令窗口的编码问题了。
  一般命令窗口的字符编码应该为gbk,这样我们才能正常的插入和显示。如Mysql中可以用配置文件my.ini制定gbk,也可以在窗口中打set names gbk;
  DB2中在命令窗口中打 db2set DB2CODEPAGE=1386。当我们敲中文插数据进去时,实际上表数据就是以utf8存储的,而在命令窗口下由于设置成了gbk,我们就能正常看到中文了。
  当用mysql中 source d:/insertData.sql或用db2中的db2 -tf d:/**.sql 这种执行sql文件的命令时,该sql必须和当前命令窗口的字符编码一致,就是上述的gbk,可用记事本另存为ANSI即行。如果sql编码不一致,如是 utf8,那么客户端的gbk不能识别文件中的utf8编码格式,是不能存储中文或其他非英文字符的。
  总之,如果用了自带的命令窗口,MySql的导入文件的编码必须和命令窗口的字符编码一致,否则里面的数据中的中文字符等无法正常识别,而DB2的命令窗口一般还是设成1386,即GBK就行,文件也是ANSI格式的,不会出错!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-301553-1-1.html 上篇帖子: DB2 SQLSTATE 消息异常 下篇帖子: [转]DB2 修改模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表