2014-04-06 4 views
1

나는 오늘 발견 한 문제에 완전히 좌절하고있다. 나는 장고에 의해 관리되지 않는 테이블을 가진 PostgreSQL 데이터베이스를 갖고 있으며,이 테이블에서 QuerySet을 통해 완전히 정상적인 쿼리를 사용하고있다. 그러나 유니 코드 예외가 발생하기 시작했고 파기를 시도 할 때 QuerySets이 비 유니 코드 문자열을 반환하는 것으로 나타났습니다!비 유니 코드 문자열을 반환하는 장고 쿼리?

예 번호 :

d = Document.objects.get(id=45787) 
print repr(d.title), type(d.title) 

상기 문장의 출력은 보통 문자열 (u 접두어없이)이다하는 <str> 타입 식별자 하였다. 게다가 은 보통 문자열에 UTF-8 데이터가 예상대로 원시 바이트 형식으로 들어 있습니다! d.title.decode('utf-8')으로 전화하면 유효한 유니 코드 문자열을 얻습니다!

더 수수께끼 인 경우 필드 중 일부는으로 올바르게 작동합니다. 이 동일한 테이블/모델에는 동일한 유형 (TextField) 인 html_filename의 다른 필드가 유니 코드 문자열으로 올바르게 반환됩니다.

나는 이 아니며 특별한 옵션이 있습니다. 데이터베이스 데이터가 올바르게 인코딩되어 있으며 솔루션 검색을 시작할 위치조차 모르겠습니다. 이것은 Django 1.6.2입니다.

업데이트 :

데이터베이스 서버 인코딩이 평소와 같이, UTF8, 그리고 데이터가 올바르게 인코딩됩니다. 이것은 우분투의 PostgreSQL 9.1에 있습니다.

업데이트 2 :

가 나는 원인을 발견 할 수 있습니다,하지만 이런 식으로 행동 이유를 모르겠어요 생각 : 나는 데이터베이스 필드가 평소와 같이 text 유형으로 정의 알았는데, 대신에 그들은 citext (http://www.postgresql.org/docs/9.1/static/citext.html)으로 정의됩니다. Django 모델은 관리되지 않기 때문에 Django는 필드 유형을 유니 코드로 변환 할 가치가있는 것으로 해석하지 않습니다. 장고가 어떻게 할 수있는 아이디어?

+0

psql 연결에서 동일한 데이터베이스에 대한'SHOW server_encoding; '의 결과는 무엇입니까? PostgreSQL 버전은 무엇입니까? –

+0

server_encoding은 UTF8이고 PostgreSQL은 9.1입니다. 하지만 ... '편집'을 참조하십시오. –

답변

0

분명히 Django는 citext 유형의 필드를 텍스트로 처리하지 않고 유니 코드 문자열로 반환합니다.

관련 문제