Jump to:

23377 Posts in 18296 Topics by 2867 members

General Questions

SilverStripe Forums » General Questions » 2.4 and mysql utf-8

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 2523 Views
  • Kalileo
    Avatar
    Community Member
    127 Posts

    2.4 and mysql utf-8 Link to this post

    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.

  • Willr
    Avatar
    Forum Moderator
    5490 Posts

    Re: 2.4 and mysql utf-8 Link to this post

    How its designed to work is the following line is included in your mysite/_config file when you install so yes this is the 'default'.

    MySQLDatabase::set_connection_charset('utf8');

  • Kalileo
    Avatar
    Community Member
    127 Posts

    Re: 2.4 and mysql utf-8 Link to this post

    Thanks Will, I'll add that line.

    My tests were 2.4 alpha installs upgraded to 2.4 beta, without overwriting the mysite/_config, so I assume you added that line between 2.4 alpha and beta.

    Anyway, a good solution.

  • pinkp
    Avatar
    Community Member
    168 Posts

    Re: 2.4 and mysql utf-8 Link to this post

    I am getting this error does it matter, what does it mean?

    Error: Couldn't run query: SET CHARACTER SET 'utf8'
    At line 536 in /home/sites/mysite.co.uk/public_html/sapphire/core/model/MySQLDatabase.php

    user_error(Couldn't run query: SET CHARACTER SET 'utf8' ,256) line 536 of MySQLDatabase.php MySQLDatabase->databaseError(Couldn't run query: SET CHARACTER SET 'utf8' | ,256) line 134 of MySQLDatabase.php MySQLDatabase->query(SET CHARACTER SET 'utf8') line 60 of MySQLDatabase.php MySQLDatabase->__construct(Array) line 94 of DB.php DB::connect(Array) line 121 of main.php

    EDIT:

    and this:

    Error: Couldn't run query: SET CHARACTER SET 'utf8'
    At line 536 in /home/sites/mysite.co.uk/public_html/sapphire/core/model/MySQLDatabase.php

    Couldn't run query: SET CHARACTER SET 'utf8'
    Line 536 of MySQLDatabase.php
    MySQLDatabase->databaseError(Couldn't run query: SET CHARACTER SET 'utf8' | ,256)
    Line 134 of MySQLDatabase.php
    MySQLDatabase->query(SET CHARACTER SET 'utf8')
    Line 60 of MySQLDatabase.php
    MySQLDatabase->__construct(Array)
    Line 94 of DB.php
    DB::connect(Array)
    Line 121 of main.php

    EDIT SOLVED: Changed the "server" in the _config.php by mistake!

    2523 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.