我说说自己的问题跟分析.两个数据库 编码不一样, 但是在同样的环境下,查询出来的结果显示是一样的, 这说明,数据的显示跟数据库编码是没关系的,而是 由 数据本身的 编码情况而定的.也就是说, 虽然 一个数据库编码是 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都试过,
反正这个问题有很多矛盾的推论,
不知道我哪里出了问题,
希望高手有个 合理的解释.
收起