zoukankan      html  css  js  c++  java
  • 【摘抄】DB2字符集问题

    三个层次的字符集  

    在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格式的,不会出错!

  • 相关阅读:
    springboot 项目添加jaeger调用链监控
    使用Maven插件快捷打包发布远程Docker镜像 dockerfile-maven-plugin
    glide install失败 Update failed for golang.org/x/net: Cannot detect VCS
    Docker 修改默认存储位置
    istio 服务地图
    istio收集Metrics和日志信息
    istio分布式调用链Jaeger
    prometheus 通过企业微信接收告警
    prometheus alert rules文件格式化
    Effective C++ 笔记二 构造/析构/赋值运算
  • 原文地址:https://www.cnblogs.com/tukzer/p/2487043.html
Copyright © 2011-2022 走看看