GET кодировка с mysql PDO

Есть ли способ получить текущий набор символов с PDO? Раньше у меня был небольшой тест с Mysqli, чтобы проверить, был ли установлен принудительный набор символов, извлекая его так:

$mysqli->get_charset(); 

Это не работает на $ conn = new PDO ();

Любая помощь приветствуется. Я довольно новичок в PDO и пытаюсь перепрыгнуть из mysqli.

Ps я знаю, как установить набор символов, просто хочу проверить, как его получить.

Благодаря HD, отвечая на вопрос, я сделал его метод статическим, возможно, полезным для кого-то (я использовал некоторые до 5.4 нотации):

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

Solutions Collecting From Web of "GET кодировка с mysql PDO"

Если мы запустим следующий запрос MySQL;

 mysql> SELECT COLLATION('foo'); +-----------------------+ | COLLATION('foo') | +-----------------------+ | utf8_general_ci | +-----------------------+ 1 row in set 

Итак, мы можем использовать следующее, чтобы получить кодировку

 $objCharset = $objPdo->query("SELECT COLLATION('foo')"); echo $objCharset->fetch(PDO::FETCH_NUM)[0]; //Output: utf8_general_ci 
  • Запрос PDO
  • PDO Fetch
  • Кубридная нить

Затем вы можете сделать еще один шаг и использовать следующее (с инъекцией объекта).

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

Если вы хотите, чтобы фактическая кодировка (не сортировка), вы можете сделать это:

 $charset = $pdo->query("SELECT CHARSET('')")->fetchColumn(); if($charset === 'utf8mb4') { $charset = 'utf8'; } 

Я поставил там utf8mb4 потому что он несовместим с функциями mb_ PHP.