Is there a way of retrieving the current character set with PDO? I used to have a little test with Mysqli to check if the forced character set was set by retrieving it like
If you want the actual charset (not collation) you can do this:
$charset = $pdo->query("SELECT CHARSET('')")->fetchColumn();
if($charset === 'utf8mb4') {
$charset = 'utf8';
}
I put the utf8mb4
check in there because it's not compatible with PHP's mb_
functions.
If we run the following MySQL query;
mysql> SELECT COLLATION('foo');
+-----------------------+
| COLLATION('foo') |
+-----------------------+
| utf8_general_ci |
+-----------------------+
1 row in set
So, we can use the following to get the charset
$objCharset = $objPdo->query("SELECT COLLATION('foo')");
echo $objCharset->fetch(PDO::FETCH_NUM)[0]; //Output: utf8_general_ci
You can then go a step further, and use the following (with object injection).
<?php
class foo {
public function get_charset($objPdo) {
$objCharset = $objPdo->query("SELECT COLLATION('foo')");
return $objCharset->fetch(PDO::FETCH_NUM)[0];
}
}
$objFoo = new foo();
$objPDO = new PDO(...);
echo $objFoo->get_charset($objPDO);