字符串转换规则
用于执行操作的代码页由应用于该操作中的操作数的规则确定。 本主题介绍了这些规则。
这些规则适用于:
- 具有集合操作 (UNION , INTERSECT 和 EXCEPT) 的全查询中的相应字符串列
- 并置的操作数
- 谓词(LIKE 除外)的操作数
- CASE 表达式 和 DECODE 标量函数 的结果表达式
- 标量函数 COALESCE 的自变量 (也为 NVL 和 VALUE)
- GREATEST、LEAST、MAX 和 MIN 标量函数的参数
- 标量函数 OVERLAY (和 INSERT) 的 source-string 和 insert-string 自变量
- IN 谓词的 IN 列表的表达式值
- 多行 VALUES 子句的相应表达式。
在每种情况下,在绑定时确定结果的代码页,操作的执行可能涉及将字符串转换为该代码页所标识的代码页。 没有有效转换的字符将映射到字符集的替换字符,并且在 SQLCA 中将 SQLWARN10 设置为 "W"。
结果的代码页由操作数的代码页确定。 前两个操作数的代码页确定中间结果代码页,此代码页和下一个操作数的代码页确定新的中间结果代码页 (如果适用) ,以此类推。 最后一个中间结果代码页和最后一个操作数的代码页确定结果字符串或列的代码页。 对于每对代码页,结果由以下规则的顺序应用程序确定:
- 如果代码页相等,那么结果是该代码页。
- 如果任一代码页是 BIT DATA (代码页 0) ,那么结果代码页是 BIT DATA。
- 如果两个代码页都是Unicode,并且一个代码页表示的编码方案与另一个代码页不同,则结果是 UTF-16 超过 UTF-8 (即图形数据类型超过字符数据类型)。
- 如果一个代码页是Unicode,另一个既不是Unicode也不是BIT DATA,则结果将是与Unicode操作数 UTF-16 或 UTF-8 )相同的编码的Unicode。
- 对于作为主变量 (其代码页不是 BIT DATA) 的操作数,结果代码页是数据库代码页。 来自此类主变量的输入数据将在使用前从应用程序代码页转换为数据库代码页。
在非 Unicode 数据库中,如果结果代码页是 Unicode ,那么结果整理是 ALT_COLLATE 数据库配置参数定义的备用整理顺序。
如果需要,将对以下对象执行到结果代码页的转换:
- 并置运算符的操作数
- COALESCE (也是 NVL 和 VALUE) 标量函数的所选自变量
- 标量函数 MAX , LEAST , MAX 和 MIN 的所选自变量
- 标量函数 OVERLAY (和 INSERT) 的 source-string 和 insert-string 自变量
- CASE 表达式 和 DECODE 标量函数 的所选结果表达式
- IN 谓词的 in 列表的表达式
- 多行 VALUES 子句的相应表达式
- 集合操作中涉及的相应列。
如果满足以下所有条件,那么需要进行字符转换:
- 代码页不同
- 这两个字符串都不是 BIT DATA
- 字符串既不为 null 也不为空
示例
示例 1: 在使用代码页 850 创建的数据库中给定以下内容:
| 表达式 | 类型 | 代码页 |
|---|---|---|
| COL_1 | 列 | 850 |
| HV_2 | 主机变量 | 437 |
对谓词求值时:
COL_1 CONCAT :HV_2两个操作数的结果代码页为 850 ,因为主变量数据在被使用前将被转换为数据库代码页。示例 2: 在对谓词求值时使用先前示例中的信息:
COALESCE(COL_1, :HV_2:NULLIND,)结果代码页为 850 ,因此 COALESCE 标量函数的结果代码页为代码页 850。