使用mysql PDO获取字符集

时间:2014-09-30 15:22:00

标签: php mysql pdo

有没有办法用PDO检索当前字符集? 我以前用Mysqli进行了一些测试来检查是否通过检索强制字符集来设置它:

$mysqli->get_charset(); 

这不适用于$ conn = new PDO();

感谢任何帮助。我对PDO很新,并试图从mysqli跳过来。

P.S。我知道如何设置字符集,只想测试如何检索它。

感谢HD回答问题我将他的方法设为静态,也许它对某人有用(我在5.4表示法之前使用了一些):

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

2 个答案:

答案 0 :(得分:8)

如果我们运行以下MySQL查询;

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

因此,我们可以使用以下内容来获取charset

$objCharset = $objPdo->query("SELECT COLLATION('foo')");
echo $objCharset->fetch(PDO::FETCH_NUM)[0]; //Output: utf8_general_ci

然后您可以更进一步,并使用以下内容(使用对象注入)。

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

答案 1 :(得分:2)

如果你想要实际的字符集(不是整理),你可以这样做:

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

我在那里放了utf8mb4支票,因为它与PHP的mb_功能不兼容。