如何解决使用 AWS DMS 从 DB2 到 PostgreSQL 的数据迁移 - Varchar 字段显示尾随空格
我们正在使用 AWS DMS 将 DB2 数据迁移到 PostgreSQL 11.x,我们在 db2 中有带有尾随空格的 varchar 字段,并且没有任何 TRIM,当我们在 WHERE 子句中使用这些字段时,这些字段工作正常。我认为 DB2 在内部修剪它们,因为它们是 varchar 字段。但是在迁移到 PostgreSQL 后,这些字段在没有 TRIM 的情况下无法工作,有时即使您使用 TRIM,这些字段也会产生意想不到的结果。下面是详细的问题。
来源:DB2 - RECIP_NUM
-- VARCHAR(10)
-- 'ST001 '
select RECIP_NUMBER,SERV_TYPE,LENGTH(SERV_TYPE) AS before_trim_COL_LENGTH,LENGTH(trim(SERV_TYPE)) AS after_trim_COL_LENGTH
from serv_type rst
WHERE SERV_TYPE = 'ST001' -- THIS WORKS FINE WITHOUT TRIM
目标:PGSQL -- RECIP_NUM
-- VARCHAR(10)
-- 'ST001 '
select RECIP_NUMBER,LENGTH(SERV_TYPE) AS COL_LENGTH
from serv_type rst
WHERE trim(SERV_TYPE) = 'ST001' -- THIS IS NOT GIVING ANY OUTPUT WITHOUT TRIM
有什么办法可以告诉 PostgreSQL 忽略 VARCHAR 列的尾随空格吗?
解决方法
Postgres 不遵循 SQL 标准,该标准要求在比较 VARCHAR
或 TEXT
字符串时填充较短的字符串;它只填充 CHAR
字符串。因此,您可以使用 ...WHERE SERV_TYPE::char = 'ST001'::char
来模拟 Db2 行为。请注意,这将排除在 SERV_TYPE
上使用索引,与使用 trim(SERV_TYPE)
时相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。