选择结果 CCSID
结果CCSID在打包准备时选中。 结果CCSID是操作数之一的CCSID。
两个操作数 :当使用两个操作数时,结果CCSID由操作数类型、它们的CCSID以及它们在操作中的相对位置决定。 当CCSID为 X'FFFF' 时,结果CCSID始终为 X'FFFF' ,且不进行字符转换。 当两个字符串的CCSID都不为 X'FFFF' 时,选择CCSID结果的规则与字符串比较的规则相同。 请参阅比较的转换规则。
三个或更多操作数:
如果所有操作数具有相同的CCSID,则结果CCSID为公共CCSID。
如果至少有一个CCSID的值为 X'FFFF' ,则结果CCSID的值也为 X'FFFF'。
否则,选择过程如下:
- 前两个操作数的操作规则适用于一对操作数。 这一步将选出进入第二步
的候选人
。 如果操作只涉及前两个操作数,则候选操作数将提供结果CCSID。 - 规则适用于第一步候选人和第三个操作数,从而选出第二个候选人。
- 如果涉及第四个操作数,则规则将应用于第二个候选操作数和第四个操作数,以选择第三个候选操作数,依此类推。
这个过程一直持续到所有操作数都被使用。 剩下的候选人就是提供CCSID结果的候选人。 当对一个候选数和一个操作数应用一对的规则时,候选数被视为第一个操作数。
例如,请考虑以下连词:
A CONCAT B CONCAT C在这里,规则首先应用于A和B两根弦。 假设选中的候选字符串是A。 然后规则适用于A和C。 如果再次选择字符串A,则A将得出结果CCSID。 否则,C 表示结果为 CCSID。
组件的字符转换 :必要时,将串联操作数或 COALESCE 标量函数的选定参数转换为结果字符串的编码字符集。 如果有必要, 集合运算的操作数的每个字符串都会转换为结果列的编码字符集。 无论哪种情况,编码字符集都是由CCSID结果标识的字符集。 仅当满足以下所有条件时,才需要进行字符转换:
- 结果和操作数CCSID不同。
- 两个CCSID都不是 X'FFFF' (两个字符串都没有定义为位数据)。
- 该字符串既不为 Null 也不为空。
- SYSSTRINGS目录表显示需要进行转换。
如果字符串中的某个字符无法转换,SYSSTRINGS 虽然可用,但其中不包含 CCSID 对的信息,或者 Db2 无法通过 z/OS® 对 Unicode 的支持进行转换,则会发生错误。 如果字符串中的某个字符被转换为替换字符,则会发出警告。