SQL 转换规则
当比较两个字符串时,如果需要,首先将其中一个字符串转换为另一个字符串的编码字符集。
仅当满足以下所有条件时,才需要进行字符转换:
- 这两个字符串的 CCSID 不同。
- 两个 CCSID 都不是 65535。
- 选择进行转换的字符串既不为 null 也不为空。
- CCSID 转换选择表指示需要转换。
如果一个字符串具有 SBCS CCSID ,而另一个是相同类型的操作数并且具有混合数据 CCSID ,那么将转换 SBCS 数据字符串。 否则,为转换选择的字符串取决于每个操作数的类型。 下表显示在给定操作数类型的情况下选择了哪个操作数进行转换。
| 第一个操作数 | 列值 (第二个操作数) | 派生值 (第二个操作数) | 专用寄存器 (第二个操作数) | 常量 (第二个操作数) | 主变量 (第二个操作数) |
|---|---|---|---|---|---|
| 列值 | 秒 | 秒 | 秒 | 秒 | 秒 |
| 派生值 | 第一个 | 秒 | 秒 | 秒 | 秒 |
| 专用寄存器 | 第一个 | 第一个 | 秒 | 秒 | 秒 |
| 常量 | 第一个 | 第一个 | 第一个 | 秒 | 秒 |
| 主变量 | 第一个 | 第一个 | 第一个 | 第一个 | 秒 |
在任何操作中使用包含外部编码方案中的数据的主变量之前,总是有效地将其转换为本机编码方案。 先前的规则基于已发生此转换的假设。
如果不能转换字符串的字符或使用 CCSID 转换选择表,但不包含有关 CCSID 对的任何信息,那么会发生错误。 如果将字符串的字符转换为替换字符,那么会发生警告。