从Oracle迁移应用到PolarDB时,代码中包含的Oracle特有 TRANSLATE ... USING语法可能导致执行失败。为简化迁移,PolarDB兼容此语法,使存量代码无需修改即可运行。
适用范围
您的PolarDB PostgreSQL版(兼容Oracle)集群的修订版本需为2.0.14.18.37.0及以上
工作原理
TRANSLATE ... USING表达式仅用于兼容Oracle语法,而非实现对等功能。
对比维度 | Oracle中的行为 | PolarDB中的行为(关键差异) |
主要作用 | 在数据库字符集 | 仅用于语法兼容,确保包含此语法的代码能够通过解析并成功执行。 |
转换行为 | 发生真实的字节级转换。 | 不发生任何字符集转换。表达式的行为等同于类型转换 |
| 将表达式转为数据库字符集,返回 | 返回 |
| 将表达式转为国家字符集,返回 | 返回 |
使用示例
验证语法兼容性
验证TRANSLATE USING表达式在处理包含多字节字符(如中文)的字符串时,不会改变字符串内容。
执行以下SQL语句:
SELECT
TRANSLATE('你好,PolarDB' USING CHAR_CS) AS result_char_cs,
TRANSLATE('你好,PolarDB' USING NCHAR_CS) AS result_nchar_cs;预期结果
返回两列完全相同的结果,证明CHAR_CS和NCHAR_CS子句在PolarDB中没有功能差异。
result_char_cs | result_nchar_cs
----------------+-----------------
你好,PolarDB | 你好,PolarDB执行实际的字符集转换
如需实现真实的字符集编码转换(例如,从UTF8转换为LATIN1),不应使用TRANSLATE USING表达式。应使用标准的CONVERT()函数执行字符集转换。
该文章对您有帮助吗?