summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/postgresql/base.py16
-rw-r--r--django/db/backends/postgresql/encodings.py48
2 files changed, 4 insertions, 60 deletions
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index ea19f65839..e2051beaa2 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -6,7 +6,6 @@ Requires psycopg 1: http://initd.org/projects/psycopg1
from django.utils.encoding import smart_str, smart_unicode
from django.db.backends import util
-from django.db.backends.postgresql.encodings import ENCODING_MAP
try:
import psycopg as Database
except ImportError, e:
@@ -64,7 +63,6 @@ class UnicodeCursorWrapper(object):
return getattr(self.cursor, attr)
postgres_version = None
-client_encoding = None
class DatabaseWrapper(local):
def __init__(self, **kwargs):
@@ -94,15 +92,8 @@ class DatabaseWrapper(local):
cursor = self.connection.cursor()
if set_tz:
cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
- cursor.execute("SHOW client_encoding")
- encoding = ENCODING_MAP[cursor.fetchone()[0]]
- cursor = UnicodeCursorWrapper(cursor, encoding)
- global client_encoding
- if not client_encoding:
- # We assume the client encoding isn't going to change for random
- # reasons.
- Database.register_type(Database.new_type(Database.types[1043].values, 'STRING', typecast_string))
- client_encoding = encoding
+ cursor.execute("SET client_encoding to 'UNICODE'")
+ cursor = UnicodeCursorWrapper(cursor, 'utf-8')
global postgres_version
if not postgres_version:
cursor.execute("SELECT version()")
@@ -289,7 +280,7 @@ def typecast_string(s):
"""
if not s:
return s
- return smart_unicode(s, client_encoding)
+ return smart_unicode(s)
# Register these custom typecasts, because Django expects dates/times to be
# in Python's native (standard-library) datetime/time format, whereas psycopg
@@ -302,6 +293,7 @@ Database.register_type(Database.new_type((1083,1266), "TIME", util.typecast_time
Database.register_type(Database.new_type((1114,1184), "TIMESTAMP", util.typecast_timestamp))
Database.register_type(Database.new_type((16,), "BOOLEAN", util.typecast_boolean))
Database.register_type(Database.new_type((1700,), "NUMERIC", util.typecast_decimal))
+Database.register_type(Database.new_type(Database.types[1043].values, 'STRING', typecast_string))
OPERATOR_MAPPING = {
'exact': '= %s',
diff --git a/django/db/backends/postgresql/encodings.py b/django/db/backends/postgresql/encodings.py
deleted file mode 100644
index 934cc6e6de..0000000000
--- a/django/db/backends/postgresql/encodings.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Mapping between PostgreSQL encodings and Python codec names. This mapping
-# doesn't exist in psycopg, so we have to maintain it by hand (using
-# information from section 21.2.1 in the PostgreSQL manual).
-ENCODING_MAP = {
- "ALT": 'cp866',
- "BIG5": 'big5-tw',
- "EUC_CN": 'gb2312',
- "EUC_JP": 'euc_jp',
- "EUC_KR": 'euc_kr',
- "GB18030": 'gb18030',
- "GBK": 'gbk',
- "ISO_8859_5": 'iso8859_5',
- "ISO_8859_6": 'iso8859_6',
- "ISO_8859_7": 'iso8859_7',
- "ISO_8859_8": 'iso8859_8',
- "JOHAB": 'johab',
- "KOI8": 'koi18_r',
- "KOI18R": 'koi18_r',
- "LATIN1": 'latin_1',
- "LATIN2": 'iso8859_2',
- "LATIN3": 'iso8859_3',
- "LATIN4": 'iso8859_4',
- "LATIN5": 'iso8859_9',
- "LATIN6": 'iso8859_10',
- "LATIN7": 'iso8859_13',
- "LATIN8": 'iso8859_14',
- "LATIN9": 'iso8859_15',
- "SJIS": 'shift_jis',
- "SQL_ASCII": 'ascii',
- "TCVN": 'cp1258',
- "UHC": 'cp949',
- "UNICODE": 'utf-8',
- "UTF8": 'utf-8',
- "WIN": 'cp1251',
- "WIN866": 'cp866',
- "WIN874": 'cp874',
- "WIN1250": 'cp1250',
- "WIN1251": 'cp1251',
- "WIN1252": 'cp1252',
- "WIN1256": 'cp1256',
- "WIN1258": 'cp1258',
-
- # Unsupported (no equivalents in codecs module):
- # EUC_TW
- # LATIN10
- # MULE_INTERNAL
-}
-