使用 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
签到那里,因为它与 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
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 获取字符集的主要内容,如果未能解决你的问题,请参考以下文章