Index: ./django/db/backends/mysql_old/base.py
===================================================================
--- ./django/db/backends/mysql_old/base.py	(revision 6399)
+++ ./django/db/backends/mysql_old/base.py	(working copy)
@@ -37,12 +37,19 @@
 # http://dev.mysql.com/doc/refman/5.0/en/news.html .
 server_version_re = re.compile(r'(\d{1,2})\.(\d{1,2})\.(\d{1,2})')

-# This is an extra debug layer over MySQL queries, to display warnings.
-# It's only used when DEBUG=True.
-class MysqlDebugWrapper:
+class MysqlWrapper:
     def __init__(self, cursor):
         self.cursor = cursor

+    def __getattr__(self, attr):
+        if attr in self.__dict__:
+            return self.__dict__[attr]
+        else:
+            return getattr(self.cursor, attr)
+
+# This is an extra debug layer over MySQL queries, to display warnings.
+# It's only used when DEBUG=True.
+class MysqlDebugWrapper(MysqlWrapper):
     def execute(self, sql, params=()):
         try:
             return self.cursor.execute(sql, params)
@@ -57,11 +64,30 @@
             self.cursor.execute("SHOW WARNINGS")
             raise Database.Warning("%s: %s" % (w, self.cursor.fetchall()))

-    def __getattr__(self, attr):
-        if attr in self.__dict__:
-            return self.__dict__[attr]
-        else:
-            return getattr(self.cursor, attr)
+class MysqlUnicodeWrapper(MysqlWrapper):
+
+    def _decode_results(self, result_raw):
+        """
+        decode all byte string to unicode with the server encoding.
+        """
+        result = []
+        for item in result_raw:
+            if isinstance(item, str):
+                item = item.decode(self.cursor.server_encoding)
+            result.append(item)
+        return tuple(result)
+
+    def fetchone(self):
+        result_raw = self.cursor.fetchone()
+        return self._decode_results(result_raw)
+
+    def fetchall(self):
+        result_raw = self.cursor.fetchall()
+        result = []
+        for line in result_raw:
+            result.append(self._decode_results(line))
+        return tuple(result)
+

 class DatabaseFeatures(BaseDatabaseFeatures):
     autoindexes_primary_keys = False
@@ -193,7 +219,11 @@
                     self.connection.set_character_set('utf8')
         else:
             cursor = self.connection.cursor()
-        return cursor
+
+        cursor.execute("SHOW VARIABLES LIKE %s;", ("character_set_server",))
+        cursor.server_encoding = cursor.fetchone()[1]
+
+        return MysqlUnicodeWrapper(cursor)

     def make_debug_cursor(self, cursor):
         return BaseDatabaseWrapper.make_debug_cursor(self, MysqlDebugWrapper(cursor))
