diff --git a/includes/database/mysql/database.inc b/includes/database/mysql/database.inc
index 7d5d859..9b67710 100644
--- a/includes/database/mysql/database.inc
+++ b/includes/database/mysql/database.inc
@@ -37,6 +37,21 @@ class DatabaseConnection_mysql extends DatabaseConnection {
       $dsn = 'mysql:host=' . $connection_options['host'] . ';port=' . (empty($connection_options['port']) ? 3306 : $connection_options['port']);
     }
     $dsn .= ';dbname=' . $connection_options['database'];
+
+    // Set MySQL init_commands if not already defined.  Default Drupal to use
+    // the UTF-8 character set. Set the collation, if a certain one has been
+    // set; otherwise, MySQL defaults to 'utf8_general_ci' for UTF-8.  Also set
+    // Drupal's behavior to conform more closely to SQL standards.  This allows
+    // Drupal to run almost seamlessly on many different kinds of database
+    // systems. These settings force MySQL to behave the same as postgresql, or
+    // sqlite in regards to syntax interpretation and invalid data handling.
+    // See http://drupal.org/node/344575 for further discussion. Also, as MySQL
+    // 5.5 changed the meaning of TRADITIONAL we need to spell out the modes
+    // one by one.
+    $connection_options += array('init_commands' => array(
+      'names' => 'SET NAMES utf8',
+      'sql_mode' => "SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'",
+    ));
     parent::__construct($dsn, $connection_options['username'], $connection_options['password'], array(
       // So we don't have to mess around with cursors and unbuffered queries by default.
       PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
@@ -45,25 +60,8 @@ class DatabaseConnection_mysql extends DatabaseConnection {
       // Force column names to lower case.
       PDO::ATTR_CASE => PDO::CASE_LOWER,
     ));
-
-    // Force MySQL to use the UTF-8 character set. Also set the collation, if a
-    // certain one has been set; otherwise, MySQL defaults to 'utf8_general_ci'
-    // for UTF-8.
-    if (!empty($connection_options['collation'])) {
-      $this->exec('SET NAMES utf8 COLLATE ' . $connection_options['collation']);
-    }
-    else {
-      $this->exec('SET NAMES utf8');
-    }
-
-    // Force MySQL's behavior to conform more closely to SQL standards.
-    // This allows Drupal to run almost seamlessly on many different
-    // kinds of database systems. These settings force MySQL to behave
-    // the same as postgresql, or sqlite in regards to syntax interpretation
-    // and invalid data handling. See http://drupal.org/node/344575 for
-    // further discussion. Also, as MySQL 5.5 changed the meaning of
-    // TRADITIONAL we need to spell out the modes one by one.
-    $this->exec("SET sql_mode='ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'");
+    // Set connection options.
+    $this->query(implode('; ', $connection_options['init_commands']));
   }
 
   public function queryRange($query, $from, $count, array $args = array(), array $options = array()) {
diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php
index a8fe52b..c349b97 100644
--- a/sites/default/default.settings.php
+++ b/sites/default/default.settings.php
@@ -61,7 +61,6 @@
  *   'host' => 'localhost',
  *   'port' => 3306,
  *   'prefix' => 'myprefix_',
- *   'collation' => 'utf8_general_ci',
  * );
  * @endcode
  *
@@ -110,7 +109,6 @@
  *   'password' => 'password',
  *   'host' => 'localhost',
  *   'prefix' => 'main_',
- *   'collation' => 'utf8_general_ci',
  * );
  * @endcode
  *
@@ -153,6 +151,17 @@
  * @endcode
  * NOTE: MySQL and SQLite's definition of a schema is a database.
  *
+ * Advanced users can override the default database init settings:
+ * @code
+ * $databases['default']['default'] = array(
+ *   'init_commands' =>
+ *   array(
+ *     'names' => 'SET NAMES utf8 COLLATE utf8_general_ci',
+ *   ),
+ * );
+ * @endcode
+ * NOTE: These are only configurable for MySQL connections.
+ *
  * Database configuration format:
  * @code
  *   $databases['default']['default'] = array(
