UTF8
fabiandev opened this issue · 4 comments
Hi,
I just noticed, that sparrow (i'm using pdo) doesn't display special characters correctly (noticed with äöü).
I fixed this by changing line 667 to:
$this->db = new PDO($dsn, $db['username'], $db['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
By the way: I really appreciate your work and started using Flight as well on a project!
Update: I just made a pull request :)
You can declare your own PDO object with the correct charset and then pass it into sparrow.
See http://stackoverflow.com/questions/4361459/php-pdo-charset-set-names
Thanks for your reply.
Yes I understand this.
However I am trying to allow my application to work with different database engine.
So I initizialize the database in this way:
public function __construct($config)
{
$this->db = new Sparrow();
$this->db->setDb($config);
}
where $config is:
[
'type' => 'mysqli', // mysqli | mysql | pgsql | sqlite | sqlite3 | pdomysql | pdopgsql | pdosqlite
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'mydatabase'
'charset' => 'utf8'
]
So is only enough to change config in order to change database engine.
For example this is for mysqli, mysql and pdo:
switch ($db['type']) {
case 'mysqli':
$this->db = new mysqli(
$db['hostname'],
$db['username'],
$db['password'],
$db['database']
);
if ($this->db->connect_error) {
throw new Exception('Connection error: '.$this->db->connect_error);
}
/* Change character set */
if (! $this->db->set_charset($db['charset'])) {
throw new Exception("Error loading character set utf8: %s\n", $this->db->error);
}
break;
case 'mysql':
$this->db = mysql_connect(
$db['hostname'],
$db['username'],
$db['password']
);
if (!$this->db) {
throw new Exception('Connection error: '.mysql_error());
}
/* Change character set */
mysql_set_charset($db['charset'], $this->db);
mysql_select_db($db['database'], $this->db);
break;
case 'pdomysql':
$dsn = sprintf(
'mysql:host=%s;port=%d;dbname=%s;charset=%s', /* Change character set */
$db['hostname'],
isset($db['port']) ? $db['port'] : 3306,
$db['database'],
$db['charset'] /* Change character set */
);
$this->db = new PDO($dsn, $db['username'], $db['password']);
$db['type'] = 'pdo';
break;
}
For pgsql, I think that is http://php.net/manual/en/function.pg-set-client-encoding.php
but I am not sure.
Not sure also for sqlite and sqlite3.
And in last, for pdomysql and pdosqlite, I think that only way is to run query:
$this->db->('SET NAMES UTF8');
I guess why not add this on sparrow?
thanks