我们有一个要求,需要替换或删除源代码中存在的“�”字符(这是一个无法识别、未定义的字符)。在运行我的工作流程时,它运行成功,但是当我检查目标中的记录时,它们没有提交。我在 Informatica 中收到以下错误
执行记录 37 的查询时出错:6706:字符串包含不可翻译的字符。
我尝试了诸如replace_chr、reg_replace、replace_str等函数,但似乎都不起作用。请建议如何摆脱这个问题。非常感谢任何回复。
您需要在模式定义中使用 charset=> utf8-unidode-ci
但现在你可以做:
UPDATE tablename
SET columnToCheck = REPLACE(CONVERT(columnToCheck USING ascii), '?', '')
WHERE ...
或
update tablename
set columnToCheck = replace(columnToCheck , char(146), '');
您可以替换表达式转换中的特殊字符。
REPLACESTR(1,Column_Name,'?',NULL)
REPLACESTR - 功能
1 - 位置
Column_Name - 具有特殊字符的列名称
? - 特殊字符
NULL - 替换字符
您需要使用连接上定义的适当字符集来获取行。您使用的是什么连接,ODBC 还是本机?数据库是什么?
特殊字符是一个挑战,检查了informatica网络后,我可以看到有一个混杂涉及replace_str首先将变量设置为所有非特殊字符的字符串,然后在replace_str中使用结果变量,以便最终值只有允许的字符https://network.informatica.com/thread/20642(nico 提供了很棒的解决方法,只要您能够明确识别应该允许的每个字符)...
作为替代的拼凑,我也会尝试在映射中的某处使用 xml 转换,因为 informatica 可以方便地将特殊字符转换为编码(我不记得的十进制或十六进制)值...只要您可以接受这些出现在你的目标文本应该没问题(并在字符串中构建一些额外的空间以容纳额外字符带来的任何膨胀