在每个数据库调用上替代手动“SET NAMES utf8”

时间:2013-03-13 15:08:47

标签: php mysql

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

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

 ????????

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

要解决此问题,在我对数据库进行任何调用之前,我使用:

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

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

1 个答案:

答案 0 :(得分: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