diff --git a/sqlsrv/database.inc b/sqlsrv/database.inc
index 972d3c9..3301df4 100755
--- a/sqlsrv/database.inc
+++ b/sqlsrv/database.inc
@@ -17,6 +17,30 @@ class DatabaseConnection_sqlsrv extends DatabaseConnection {
   public $bypassQueryPreprocess = FALSE;
 
   /**
+   * Utility function to fix parameter encoding.
+   *
+   * @status --
+   */
+  public function FixParameterEncodingArray(Array &$values_array) {
+    foreach ($values_array as &$field_value) {
+      $this->FixParameterEncoding($field_value);
+    }
+  }
+  
+  /**
+   * Utility function to fix parameter encoding.
+   *
+   * @status --
+   */
+  public function FixParameterEncoding(&$value) {
+    if (is_string($value)) {
+      if (!mb_detect_encoding($value, 'UTF-8', true)) {
+        $value = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
+      }
+    }
+  }
+
+  /**
    * Override of DatabaseConnection::driver().
    *
    * @status tested
@@ -408,6 +432,9 @@ class DatabaseStatement_sqlsrv extends DatabaseStatementPrefetch implements Iter
       $this->throwPDOException();
     }
 
+    // Issue #2168191: Fix encoding.
+    $this->dbh->FixParameterEncodingArray($args);
+
     $return = $statement->execute($args);
     if (!$return) {
       $this->throwPDOException();
diff --git a/sqlsrv/query.inc b/sqlsrv/query.inc
index 73ce681..0fab309 100755
--- a/sqlsrv/query.inc
+++ b/sqlsrv/query.inc
@@ -85,6 +85,8 @@ class InsertQuery_sqlsrv extends InsertQuery {
 
     foreach ($this->insertValues as $insert_index => $insert_values) {
       $max_placeholder = 0;
+      // Issue #2168191: Fix encoding.
+      $this->connection->FixParameterEncodingArray($insert_values);
       foreach ($this->insertFields as $field_index => $field) {
         $placeholder = ':db_insert' . $max_placeholder++;
         if (isset($columnInformation['blobs'][$field])) {
@@ -221,6 +223,16 @@ class UpdateQuery_sqlsrv extends UpdateQuery {
     // Fetch the list of blobs and sequences used on that table.
     $columnInformation = $this->connection->schema()->queryColumnInformation($this->table);
 
+    // Issue #2168191: Fix encoding.
+    if (!empty($this->condition->arguments)) {
+      $this->connection->FixParameterEncodingArray($this->condition->arguments);
+    }
+
+    // Issue #2168191: Fix encoding.
+    if (!empty($this->fields)) {
+      $this->connection->FixParameterEncodingArray($this->fields);
+    }
+
     // Expressions take priority over literal fields, so we process those first
     // and remove any literal fields that conflict.
     $fields = $this->fields;
