软件开发

数据乱码,编码的问题,求高人解答

DB2 DBMS 安装在  RHEL 5.4 英文系统,
有两个数据库, src  , ds_src,编码一个是US.utf-8, 一个是 CN.gbk,
有同样的表 dict.t_dept_dict ,
表的数据编码一致(因为都是从同一个源用DB2MOVE copy 命令导入进来的,
现在有如下问题, 我不明白, 希望大家给分析下

RHEL (服务器端)  英文系统
LANG=zh_CN.GB18030
在src与ds_src下执行语句 结果相同



db2_1.jpg


LANG=en_US.UTF-8
在src与ds_src下执行语句 结果相同





WIN 7 (客户端)  中文系统

在src与ds_src下执行语句 结果相同
SecurityCRT session encoding=utf-8





在src与ds_src下执行语句 结果相同
SCRT session encoding=gb18030



参与7

6 同行回答

Tolstoy Tolstoy 数据仓库工程师 sinobpo
回复 6# IBM章鱼哥     我已经解决了 具体啥问题 也搞不清楚了http://alexandertolstoy.blogspot.com/2012_09_01_archive.html显示全部
回复 6# IBM章鱼哥


    我已经解决了
具体啥问题 也搞不清楚了
http://alexandertolstoy.blogspot.com/2012_09_01_archive.html 收起
软件开发 · 2012-12-14
浏览512
IBM章鱼哥 IBM章鱼哥 软件工程师 IBM
好久的帖子了,今天逛逛突然翻到看的有点晕,下面说下我的推断两个数据库 编码不一样, 但是在同样的环境下,查询出来的结果显示是一样的, 这说明,数据的显示跟数据库编码是没关系的,而是由数据本身的 编码情况而定的.也就是说, 虽然 一个数据库编码是 utf-8, 一个数据库 编码...显示全部
好久的帖子了,今天逛逛突然翻到

看的有点晕,下面说下我的推断

两个数据库 编码不一样, 但是在同样的环境下,查询出来的结果显示是一样的, 这说明,数据的显示跟数据库编码是没关系的,而是由数据本身的 编码情况而定的.
也就是说, 虽然 一个数据库编码是 utf-8, 一个数据库 编码是 gb18030(gbk,gb2312)
但是由于数据来源是一致的,所以 数据编码也是一致的, 要么同为 gb18030,要么同为utf-8 收起
IT分销/经销 · 2012-12-04
浏览473
Tolstoy Tolstoy 数据仓库工程师 sinobpo
我说说自己的问题跟分析.两个数据库 编码不一样, 但是在同样的环境下,查询出来的结果显示是一样的, 这说明,数据的显示跟数据库编码是没关系的,而是 由 数据本身的 编码情况而定的.也就是说, 虽然 一个数据库编码是 utf-8, 一个数据库 编码是 gb18030(gbk,gb2312)但是由...显示全部
我说说自己的问题跟分析.


两个数据库 编码不一样, 但是在同样的环境下,查询出来的结果显示是一样的, 这说明,数据的显示跟数据库编码是没关系的,而是 由 数据本身的 编码情况而定的.
也就是说, 虽然 一个数据库编码是 utf-8, 一个数据库 编码是 gb18030(gbk,gb2312)
但是由于数据来源是一致的,所以 数据编码也是一致的, 要么同为 gb18030,要么同为utf-8

这是我第一个推断.不知有没有道理,说的对不对

然后再看.
我不理解LANG这个变量的影响范围, 在RHEL下, 我无论设置为 utf-8,还是gbk,显示都有问题, 我以为 LANG只是改变了 shell 程序的 环境, 也就是 bash的 环境, 而系统的语言环境没变, 所以 显示还是有问题的.
所以在 windows平台下(中文系统) 在shell程序的encoding为utf-8的时候就显示正常了, 说明, 首先windows支持中午字符集, 其次,数据本身是utf-8 编码,所以才能正常显示.
在linux下,无论是 lang是utf-8,或lang是gb18030 , 显示都是乱码, 说明操作系统的字符集不支持 中文.

通过以上可以推断, 要正常显示 数据 , 首先 系统 要支持 数据的编码, 其次,解读数据的 shell程序 的语言环境也要 支持 数据编码. 也就是 系统编码跟shell语言环境跟 数据编码要一致.

另外还有一个就是说,  第三张图 能正常显示, shell环境是utf-8 ,那么 数据编码应该是 utf-8了, 可是 windows中文系统的 系统字符集是 cp936, 也就是gbk或者gb18030了,  也就是说
无论数据库编码是什么, 系统编码是什么, 只要shell的语言环境跟 数据编码一致,就能正常显示,
但是 这个推断在 前两张图 linux下又不成立,因为 在linux 下LANG=UTF-8 与LANG=GB18030都试过,

反正这个问题有很多矛盾的推论,
不知道我哪里出了问题,
希望高手有个 合理的解释. 收起
软件开发 · 2012-09-09
浏览514
Tolstoy Tolstoy 数据仓库工程师 sinobpo
上面的每个图片,都是不同的环境下的情况, 但是相同的环境下, 两个数据库的 结果跟情况是一致的显示全部
上面的每个图片,都是不同的环境下的情况, 但是相同的环境下, 两个数据库的 结果跟情况是一致的 收起
软件开发 · 2012-09-09
浏览443
Tolstoy Tolstoy 数据仓库工程师 sinobpo
回复 2# hooboor     数据库编码是不一样, 但是数据的编码应该是一样的吧, 因为是从同一个数据库里用db2move导入的, 另外 ,我贴的每一个图,这两个 不同编码的数据库的结果都一样.显示全部
回复 2# hooboor


    数据库编码是不一样, 但是数据的编码应该是一样的吧, 因为是从同一个数据库里用db2move导入的, 另外 ,我贴的每一个图,这两个 不同编码的数据库的结果都一样. 收起
软件开发 · 2012-09-09
浏览446
hooboor hooboor 其它 未知
你上面不是已經說了兩個數據庫編碼不一樣嘛。显示全部
你上面不是已經說了兩個數據庫編碼不一樣嘛。 收起
互联网服务 · 2012-09-07
浏览464

提问者

Tolstoy
数据仓库工程师 sinobpo
评论30

问题状态

  • 发布时间:2012-09-06
  • 关注会员:1 人
  • 问题浏览:6617
  • 最近回答:2012-12-14
  • X社区推广