使用 mysql PDO 获取字符集

Posted

技术标签:

【中文标题】使用 mysql PDO 获取字符集【英文标题】:GET charset with mysql PDO 【发布时间】:2014-11-25 07:07:05 【问题描述】:

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

$mysqli->get_charset(); 

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

感谢任何帮助。我对 PDO 还很陌生,并试图从 mysqli 跳过去。

附注我知道如何设置字符集,只是想测试如何检索它。

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

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

【问题讨论】:

有趣,我从来没想过。我认为没有办法使用 PDO 获取字符集。 @JayBlanchard 也许 OP 意味着使用 ***.com/a/4361485 - 虽然不确定这是否属于重复项。很难理解这个问题。 嗨,弗雷德,就我而言,它不是重复的。我的问题不是关于设置字符集,而是“如何”使用 PDO “检索”字符集,就像使用 mysqli 的 get_charset 函数一样 @rinserepeat 这就是为什么我说我不确定。感谢您添加的信息。请参阅下面给出的答案。 @rinserepeat 不要在您的问题中包含答案。如果您将自己问题的答案作为单独的答案提供,那也没关系。 【参考方案1】:

如果你想要实际的 charset(不是排序规则),你可以这样做:

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

我把 utf8mb4 签到那里,因为它与 phpmb_ 函数不兼容。

【讨论】:

【参考方案2】:

如果我们运行以下 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 Query PDO Fetch Cubrid thread

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

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

【讨论】:

嗨,对我来说似乎需要一点修改的高清: $objCharset = $conn->query("SELECT COLLATION('foo')"); $charset = $objCharset->fetch(PDO::FETCH_NUM);回声 $charset[0]; 啊,好吧!这个答案中使用的速记是在 PHP5.5 中引入的(我相信):) 旁注:实际上 dereference 函数已经在 PHP 5.4 及更高版本上 谢谢先生!非常感谢 @Ghost 谢谢!我现在会试着记住这一点

以上是关于使用 mysql PDO 获取字符集的主要内容,如果未能解决你的问题,请参考以下文章

PDO + MySQL 总是返回字符串,但是 MsSQL 呢?

php使用pdo连接mysql数据库如何设置发送的字符集?

PHP / MySQL中的PDO和UTF-8特殊字符?

PHP pdo mysql 的默认字符集是啥

DB2如何使用PDO指定连接字符集

如何防止 PHP PDO 通过 jQuery AJAX 插入 MySQL varchar 中的转义字符