rinserepeat rinserepeat - 4 months ago 7x
SQL Question

GET charset with mysql PDO

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 so:


That doesn't work on $conn = new PDO();

Any help is appreciated. I'm fairly new to PDO and trying to jump over from mysqli.

P.s. i am aware how to set the character set, just want to test how to retrieve it.

Thanks to HD answering the question I made his method static, perhaps its helpful for someone (I used some prior to 5.4 notation):

public static function getCharset(PDO $objPdo) {
$objCharset = $objPdo->query("SELECT COLLATION('foo')");
$charset = $objCharset->fetch(PDO::FETCH_NUM);
return $charset[0];


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).


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);