diff --git a/includes/database/mysql/database.inc b/includes/database/mysql/database.inc
index a61fa9d9af853454ae76ec8d026bda1b62de8eac..26fe17247ca56f6b1d7c3c37dd098e1b01dc3b11 100644
--- a/includes/database/mysql/database.inc
+++ b/includes/database/mysql/database.inc
@@ -30,6 +30,12 @@ public function __construct(Array $connection_options = array()) {
       // Because MySQL's prepared statements skip the query cache, because it's dumb.
       PDO::ATTR_EMULATE_PREPARES => TRUE,
     ));
+
+    // Force MySQL to use the UTF-8 character set by default.
+    $this->exec('SET NAMES "utf8"');
+
+    // Enable MySQL's "strict mode", which removes most of MySQL's
+    // "just be lazy" behaviors that end up causing more trouble than they're worth.
     $this->exec('SET sql_mode=STRICT_ALL_TABLES');
   }
 
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test
index 17b838b71dcc851b18b9b60dea1e9be8ef038466..c7b4f69d630571c210801ef0b5c6d4244e5eff1d 100644
--- a/modules/simpletest/tests/database_test.test
+++ b/modules/simpletest/tests/database_test.test
@@ -1569,3 +1569,37 @@ class DatabaseAlter2TestCase extends DatabaseTestCase {
     }
   }
 }
+
+/**
+ * Regression tests.
+ */
+class DatabaseRegressionTestCase extends DatabaseTestCase {
+
+  function getInfo() {
+    return array(
+      'name' => t('Regression tests'),
+      'description' => t('Regression tests cases for the database layer.'),
+      'group' => t('Database'),
+    );
+  }
+
+  /**
+   * Regression test for #310447.
+   *
+   * Tries to insert non-ascii UTF-8 data in a database column and checks
+   * if its stored properly.
+   */
+  function testRegression_310447() {
+    // That's a 255 character UTF-8 string.
+    $name = str_repeat("é", 255);
+    db_insert('test')
+      ->fields(array(
+        'name' => $name,
+        'age' => 20,
+        'job' => 'Dancer',
+      ))->execute();
+
+    $from_database = db_query("SELECT name FROM {test} WHERE name = :name", array(':name' => $name))->fetchField();
+    $this->assertIdentical($name, $from_database, t("The database handles UTF-8 characters cleanly."));
+  }
+}