使用mysql PDO获取字符集


GET charset with 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];
 }

如果我们运行以下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获取
  • 立方体螺纹

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

<?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检查放在那里,因为它与PHP的mb_函数不兼容。