Index: lib/sqlalchemy/types.py
===================================================================
--- lib/sqlalchemy/types.py	(revision 1294)
+++ lib/sqlalchemy/types.py	(working copy)
@@ -96,15 +96,24 @@
     def get_constructor_args(self):
         return {'length':self.length}
     def convert_bind_param(self, value, engine):
-        if not engine.convert_unicode or value is None or not isinstance(value, unicode):
+        if value is None:
+            return None
+        elif isinstance(value, unicode):
+            return value.encode(engine.encoding)
+            # or even raise exception (but I wouldn't go that far)
+        elif engine.client_encoding != engine.encoding:
+            return unicode(value, engine.client_encoding).encode(engine.encoding)
+        else:
             return value
+    def convert_result_value(self, value, engine):
+        if value is None:
+            return None
+        elif isinstance(value, unicode):
+            return value.encode(engine.client_encoding)
+        elif engine.client_encoding != engine.encoding:
+            return unicode(value, engine.encoding).encode(engine.client_encoding)
         else:
-            return value.encode(engine.encoding)
-    def convert_result_value(self, value, engine):
-        if not engine.convert_unicode or value is None or isinstance(value, unicode):
             return value
-        else:
-            return value.decode(engine.encoding)
     def adapt_args(self):
         if self.length is None:
             return TEXT()
Index: lib/sqlalchemy/engine.py
===================================================================
--- lib/sqlalchemy/engine.py	(revision 1294)
+++ lib/sqlalchemy/engine.py	(working copy)
@@ -227,7 +227,7 @@
     SQLEngines are constructed via the create_engine() function inside this package.
     """
     
-    def __init__(self, pool=None, echo=False, logger=None, default_ordering=False, echo_pool=False, echo_uow=False, convert_unicode=False, encoding='utf-8', **params):
+    def __init__(self, pool=None, echo=False, logger=None, default_ordering=False, echo_pool=False, echo_uow=False, encoding='utf-8', client_encoding=None, **params):
         """constructs a new SQLEngine.   SQLEngines should be constructed via the create_engine()
         function which will construct the appropriate subclass of SQLEngine."""
         # get a handle on the connection pool via the connect arguments
@@ -246,8 +246,8 @@
         self.default_ordering=default_ordering
         self.echo = echo
         self.echo_uow = echo_uow
-        self.convert_unicode = convert_unicode
         self.encoding = encoding
+        self.client_encoding = client_encoding or encoding
         self.context = util.ThreadLocal()
         self._ischema = None
         self._figure_paramstyle()
