Skip to content

Commit

Permalink
Convert binary-matched VARCHAR fields to unicode objects in the MySQL…
Browse files Browse the repository at this point in the history
… backend.

This conforms to Djangos' policy of returning Unicode everywhere.

Suggested by arne and Martin von Löwis. Refs #7789.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@8318 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
malcolmt committed Aug 12, 2008
1 parent 6bebb23 commit ca71eac
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions django/db/backends/mysql/base.py
Expand Up @@ -4,6 +4,8 @@
Requires MySQLdb: http://sourceforge.net/projects/mysql-python
"""

import re

from django.db.backends import *
from django.db.backends.mysql.client import DatabaseClient
from django.db.backends.mysql.creation import DatabaseCreation
Expand All @@ -26,8 +28,7 @@
raise ImproperlyConfigured("MySQLdb-1.2.1p2 or newer is required; you have %s" % Database.__version__)

from MySQLdb.converters import conversions
from MySQLdb.constants import FIELD_TYPE
import re
from MySQLdb.constants import FIELD_TYPE, FLAG

# Raise exceptions for database warnings if DEBUG is on
from django.conf import settings
Expand All @@ -49,6 +50,12 @@
FIELD_TYPE.TIME: util.typecast_time,
FIELD_TYPE.DECIMAL: util.typecast_decimal,
FIELD_TYPE.NEWDECIMAL: util.typecast_decimal,
# By default, mysqldb will return VARCHAR BINARY fields as type str.
# This is a bad idea, as BINARY doesn't indicate that it's arbitrary
# binary data, but that collation uses the binary representation.
# Replacing the list makes it return unicode. MySQLdb later adds
# another list entry for non-binary fields.
FIELD_TYPE.VARCHAR: [(FLAG.BINARY, lambda s: s.decode('utf-8'))],
})

# This should match the numerical portion of the version numbers (we can treat
Expand Down Expand Up @@ -167,7 +174,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
def __init__(self, **kwargs):
super(DatabaseWrapper, self).__init__(**kwargs)
self.server_version = None

self.features = DatabaseFeatures()
self.ops = DatabaseOperations()
self.client = DatabaseClient()
Expand Down

0 comments on commit ca71eac

Please sign in to comment.