Index: lib/sqlalchemy/types.py
===================================================================
--- lib/sqlalchemy/types.py	(revision 1280)
+++ lib/sqlalchemy/types.py	(working copy)
@@ -97,7 +97,10 @@
         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):
-            return value
+            if isinstance(value, str) and engine.client_encoding:
+                return unicode(value, engine.client_encoding).encode(engine.encoding)
+            else:
+                return value
         else:
             return value.encode(engine.encoding)
     def convert_result_value(self, value, engine):
@@ -116,7 +119,10 @@
          if value is not None and isinstance(value, unicode):
               return value.encode(engine.encoding)
          else:
-              return value
+              if isinstance(value, str) and engine.client_encoding:
+                  return unicode(value, engine.client_encoding).encode(engine.encoding)
+              else:
+                  return value
     def convert_result_value(self, value, engine):
          if value is not None and not isinstance(value, unicode):
              return value.decode(engine.encoding)
Index: lib/sqlalchemy/engine.py
===================================================================
--- lib/sqlalchemy/engine.py	(revision 1280)
+++ lib/sqlalchemy/engine.py	(working copy)
@@ -229,7 +229,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, convert_unicode=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
@@ -250,6 +250,7 @@
         self.echo_uow = echo_uow
         self.convert_unicode = convert_unicode
         self.encoding = encoding
+        self.client_encoding = client_encoding
         self.context = util.ThreadLocal()
         self._ischema = None
         self._figure_paramstyle()
