CCSID是一个字符集的标识。作为unicode标准通过定义一个字符集内每个字符要对应那个数字值的方式定义了一个字符集。这说明CCSID就是一个定义字符集顺序的标识数码罢了。IBM的字符标识架构在文档 SC09-1390(http://www-304.ibm.com/jct03002c/software/globalization/cdra/index.jsp;http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/FOCREF00/CCONTENTS)中做了定义,CCSID是IBM用来标识字符序列的标识代码。这个架构定义了SDCS(单字符集)的CCSID值,MBCS(多字符集)的CCSID值和混合单字符多字符集的混合CCSID值。多字符集的CCSID一般用于语言,比如中文,日文,韩文,这些语言的字符量很大,无法用单字节的码值来代表。
CCSID间的转换有多种类型。其中一种转换就是从一种CCSID到另一种CCSID的转换,举例来说从ASCII(CCSID 1252)到EBCDIC(CCSID 37)。另一种是从串数据到另一种数据类型的转换。举例来说转换字符串数据到数值。在所有的这种类型的转换中都必须标识CCSID值来保证转换的正确进行。
但是转换是有要求的,第一种转换的前提是转到的 CCSID的类型中要包含转换前的CCSID类型中要转换的字符,比如,如果从CCSID1381(S-CHGBPC-DATA) 类型的简体中文的PC编码中的一个中文字符"中"字到其他CCSID编码转换到的编码起码要求这个CCSID编码的字符集中包含同样的"中"字。
runmqsc MQ名,然后输入
- dis QMGR
显示全信息,其中就有CCSID。
由上可知,我服务器上队列管理器的CCSID是1381,客户机代码假设通过客户机中 MQI 的字符数据位于机器所配置的 CCSID 中。如果此 CCSID 是一个不支持的 CCSID 或不是必需的 CCSID,可以用 MQCCSID 环境变量覆盖它,例如,在 Windows上:
- SET MQCCSID=1381
或者,在 UNIX系统上:
- export MQCCSID=1381
安装好了MQ Server端并新建了QMGR,可以通过上面方法更改其MQCCSID,我们环境中所有QMGR的MQCCSID都是1381。
在MQ Server上面任何用户在往该MQGR的queue里面放消息时,消息使用的字符编码都是1381(与QMGR的设定相同),这里即使在用户的profile里面export MQCCSID等于别的,结果消息也是始终与QMGR的设定保持一样。
最后,export MQCCSID只有在MQ Client端才有用,通过export MQSERVER 连接到MQ Server的MQ Client端可以给用户的profile里面设定MQCCSID,如环境AIX上面如果没有给用户特别设定MQCCSID则default的是819即en_US.ISO8859-1。
参考文章:http://blog.chinaunix.net/uid-20652643-id-1906356.html
http://www.cnblogs.com/fromchaos/archive/2010/02/24/1672736.html