2012-04-11 106 views
1

我從外部源加載數據的轉儲和一些字符串包含\uXXXX序列的UTF8字符,像這樣的:如何將文字 u序列轉換爲UTF-8?

\u017D\u010F\u00E1r nad S\u00E1zavou 

我可以在psql使用E「」常量檢查內容,但無法找到任何函數/操作符返回給我適當的值。

我想問一下,如果可以使用PL/pgSQL函數將此字符串轉換爲正常的UTF8 而不使用

+0

\ E「'字面格式不是psql客戶端的事情 - 在PostgreSQL服務器上運行的任何SQL代碼都可以使用該語法。你可以把這個字符串變成像'E'\ u017D \ u010F \ u00E1r nad S \ u00E1zavou'這樣的文字,以便正確解釋它;你還想做什麼? – kgrittn 2012-04-11 19:48:17

+0

我希望能夠這樣做:'UPDATE table SET proper = somefunc('\ u017D \ u010F \ u00E1r nad S \ u00E1zavou')WHERE id = 1;'。並獲得預期的UTF8字符串。 – vyegorov 2012-04-11 19:54:59

+0

如果數據庫使用的是UTF8編碼,你應該可以這樣做:'UPDATE table SET proper = E'\ u017D \ u010F \ u00E1r nad S \ u00E1zavou'WHERE id = 1;'你在運行時得到了什麼'SHOW server_encoding;'? 'SHOW client_encoding;'怎麼樣? – kgrittn 2012-04-11 20:45:53

回答

2

我不認爲有一個內置的方法。我能想到的最簡單的方法是你想避免PLPGSQL功能:

CREATE OR REPLACE FUNCTION str_eval(text, OUT t text) AS 
$func$ 
BEGIN 
EXECUTE 'SELECT E''' || replace($1, '''', '''''') || '''' 
USING $1 
INTO t; 
END 
$func$ LANGUAGE plpgsql IMMUTABLE STRICT; 

SQLi更新版本保障和更快了。

+0

Erwin Brandsetter,謝謝! – ceadreak 2016-06-02 16:06:50