替换PostgreSQL的Unicode字符(Replace unicode characters

2019-07-20 21:44发布

是否有可能取代给定字符(Unicode中表示)与PostgreSQL中varchar字段另一个字符(Unicode中表示)的所有出现?

我想是这样的:

UPDATE mytable 
SET myfield = regexp_replace(myfield, '\u0050', '\u0060', 'g')

但它似乎真的写在该领域的字符串“\ u0060”,而不是对应于该代码的字符。

Answer 1:

按照词法结构PostgreSQL文档 ,你应该使用U&语法:

UPDATE mytable 
SET myfield = regexp_replace(myfield, U&'\0050', U&'\0060', 'g')

您也可以使用PostgreSQL相关逃避字符串形式的E'\u0050' 。 比Unicode转义格式做这将工作在旧版本,但Unicode转义形式是优选的新版本。 这应该显示是怎么回事:

regress=> SELECT '\u0050', E'\u0050', U&'\0050';
 ?column? | ?column? | ?column? 
----------+----------+----------
 \u0050   | P        | P
(1 row)


Answer 2:

它应与“相对应的字符代码”的,除非在食品链来客户端或其他层轧液你的代码工作!

此外,使用translate()replace()这个简单的工作。 比很多快regexp_replace() translate()也是很好的一次为多个简单的替代品。
并避免与空更新 WHERE子句。 快得多着呢,避免表船和额外的VACUUM成本。

UPDATE mytable
SET    myfield  = translate(myfield, 'P', '`')  -- actual characters
WHERE  myfield <> translate(myfield, 'P', '`');

如果你一直运行到的问题,使用的编码@mvp提供:

UPDATE mytable
SET   myfield =  translate(myfield, U&'\0050', U&'\0060')
WHERE myfield <> translate(myfield, U&'\0050', U&'\0060');


文章来源: Replace unicode characters in PostgreSQL