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.")); + } +}