【问题标题】:Alternative to manual "SET NAMES utf8" on every database call [duplicate]在每个数据库调用中替代手动“SET NAMES utf8”[重复]
【发布时间】:2013-03-01 14:37:24
【问题描述】:

我的网站上有来自 mysql 数据库的日语。

网站上的其他日文文本显示正常,但从数据库中出来的内容如下:

 ????????

数据库设置为 UTF8,网页也是如此。

为了解决这个问题,在我对我使用的数据库进行任何调用之前:

$db->query("SET NAMES utf8");

我想知道是否有更好/更简单的方法来执行上述操作,而不必在每次查询之前设置名称?

【问题讨论】:

  • 那么,SET NAMES utf8 是否解决了这个问题? (所有体面的数据库库都允许设置客户端编码,请查看您的文档。)
  • 设置集合名称确实解决了这个问题,我只是想知道是否有更好的方法。
  • 每个连接只需要一次,而不是在每次查询之前。此外,如果您使用 PDO,您可以对其进行配置,以便它自动为您执行此操作。

标签: php mysql


【解决方案1】:

您不必在每次查询之前使用SET NAMES utf8,只需在建立连接后运行它。以下是 PDO 的示例:

try {
    $dns  = "mysql:host={HOST};dbname={DB}";
    $user = "{USER}";
    $pass = "{PASS}";
    $con = new PDO($dns, $user, $pass);
} catch ( Exception $e ) {
    echo "Connexion error ", $e->getMessage();
    die();
}

$con->query("SET NAMES utf8;");
//and now, as many queries as you want

如果您使用 PHP >= 5.3.6,您可以在连接字符串中定义字符集(以前的 PHP 版本忽略它):

try {
    $dns  = "mysql:host={HOST};dbname={DB};charset=utf8";
    $user = "{USER}";
    $pass = "{PASS}";
    $con = new PDO($dns, $user, $pass);
} catch ( Exception $e ) {
    echo "Connexion error ", $e->getMessage();
    die();
}

//and now, as many queries as you want

【讨论】:

  • 但是我在不同的模型中有很多数据库连接,如果你在每一个之前不调用集合名称,它就不起作用。
  • PDO 提供了一种更好的设置编码方式。而且我们真的不知道他是否在使用 PDO:他没有说过。
  • @ÁlvaroG.Vicario 对,我在帖子中添加了连接字符串的方式。
  • @user1013512 您应该将所有这些连接集中在一个单独的连接中,以避免此类问题。
猜你喜欢
  • 2019-04-06
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
相关资源
最近更新 更多