【问题标题】:GET charset with mysql PDO使用 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 意味着使用 stackoverflow.com/a/4361485 - 虽然不确定这是否属于重复项。很难理解这个问题。
  • 嗨,弗雷德,就我而言,它不是重复的。我的问题不是关于设置字符集,而是“如何”使用 PDO “检索”字符集,就像使用 mysqli 的 get_charset 函数一样
  • @rinserepeat 这就是为什么我说我不确定。感谢您添加的信息。请参阅下面给出的答案。
  • @rinserepeat 不要在您的问题中包含答案。如果您将自己问题的答案作为单独的答案提供,那也没关系。

标签: php mysql pdo


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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
    

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

    <?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 谢谢!我现在会试着记住这一点
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2010-11-14
    • 2021-06-05
    相关资源
    最近更新 更多