2010-11-26 5 views
0

인코딩 UTF-8, 데이터 정렬 및 ctype ru_RU.UTF-8이있는 데이터베이스가 있습니다. 테이블 구조 - id, key, value. 한 줄 삽입 :유니 코드로 SQL 선택

1 | size | --- "\xD0\xA0\xD0\xB0\xD0\xB7\xD0\xBC\xD0\xB5\xD1\x80"| 

내가 콘솔에서

SELECT E'--- "\xD0\xA0\xD0\xB0\xD0\xB7\xD0\xBC\xD0\xB5\xD1\x80"'; 

을 실행했을 때, 나는 올바른 출력

?column? 
    -------------- 
    --- "Размер" 
    (1 row) 

있어하지만

select "value" from "translations" where "key"='size'; 

I을 실행하려고 할 때 ~

value       
    -------------------------------------------------------- 
    --- "\xD0\xA0\xD0\xB0\xD0\xB7\xD0\xBC\xD0\xB5\xD1\x80" 
    (1 row) 

이스케이프 처리되지 않은 문자열을 얻는 방법은 무엇입니까?

CREATE TABLE translations (
    id serial NOT NULL, 
    "key" character varying(255) NOT NULL, 
    "value" text, 
    CONSTRAINT translations_pkey PRIMARY KEY (id)) 
WITH (OIDS=FALSE); 
ALTER TABLE translations OWNER TO user; 
CREATE UNIQUE INDEX index_translations_on_key ON translations USING btree (key); 
+0

왜 CREATE TABLE의 DDL을 표시하지 않습니까? – Unreason

+0

TABLE 변환을 만들기 ( ID 직렬 NULL NOT, "키"캐릭터 변화 (255) NULL NOT, "값"텍스트 PRIMARY KEY translations_pkey CONSTRAINT (ID) ) ( OIDS = FALSE ) WITH ; ALTER TABLE 번역 OWNER TO 사용자; 고유 인덱스 생성 index_translations_on_key 번역시 USING btree (키); –

+0

함수가 quote_literal 함수를 찾았 으면, 출력 - E '--- "\ xD0 \ xA0 \ xD0 \ xB0 \ xD0 \ xB7 \ xD0 \ xBC \ xD0 \ xB5 \ xD1 \ x80"' 그것. –

답변

2
CREATE OR REPLACE FUNCTION eval(text) RETURNS text AS 
$BODY$ 
DECLARE 
    s text; 
    r text; 
BEGIN 
    s := 'select ' || $1 ; 
    execute s into r; 
    return r; 
END; 
$BODY$ LANGUAGE 'plpgsql' VOLATILE; 

select eval(E'E\'' || "value" || E'\'') from translations where key = 'size' and "value" IS NOT NULL; 

끔찍한 보이지만, 작동 :)

+0

의무적 인 "zomg은 그렇게 못생긴"발언입니다. 추악한 데이터에 대한 추악한 솔루션 : 사실 – araqnid

+0

사실이긴하지만 내 데이터가 아니므로 작업해야합니다. –

0

데이터베이스에서 탈출 값을 저장하는 이유를 이해하지 않지만, 지금까지 내가 말할 수있는, 디코드 기능은 어떻게해야 필요.

 
SELECT decode(value, 'hex') 
FROM translations; 
+0

디코드가 작동하지 않습니다. 나는 노력했다. 첫 번째 '-'기호에서 실패합니다. 이것은 내가 그 값을 저장하지 않습니다 :) –

관련 문제