I remember having seen a statement that the mysql connection in SS 2.4 would default to utf-8, but I cannot find that statement anymore. It might have been in a bug ticket about utf-8. So my question is, how about the default for 2.4, will mysql connections default to utf-8?
If it's meant to be like that, then it didn't work in my tests. The code in MySQLDatabase.php Line 43
public static function set_connection_charset($charset = 'utf8') {
self::$connection_charset = $charset;
}
and line 59:
if(self::$connection_charset) {
$this->query("SET CHARACTER SET '" . self::$connection_charset . "'");
$this->query("SET NAMES '" . self::$connection_charset . "'");
}
did not result in setting the connection to UTF-8. Only adding there
$this->query("SET CHARACTER SET 'utf8'");
$this->query("SET NAMES 'utf8'");
did it. But that would be hacking the core. I think the current code had flexibility in mind, so let me propose a solution which is flexible but still enforces UTF-8 (or whatever I want) if I want to. Simply add in mysite/_config.php one setting encoding in $databaseConfig and have MySQLDatabase.php use it (if present):
$databaseConfig = array(
"type" => "MySQLDatabase",
"server" => "localhost",
"username" => "xxxxxxxx",
"password" => 'xxxxxxxx',
"database" => "xxxxxxxx",
"encoding" => "utf8",
);
Another solution would be to add Malte's UTF8MySQLDatabase class, good enough for me, but that would not give the flexibility to force any encoding.