2013-03-13 54 views
0

我在我的网站上有来自mysql数据库的日语。在网站上替代手动“SET NAMES utf8”每个数据库调用

其他日文文本显示细腻,但出来的数据库的东西看起来像:

???????? 

的数据库设置为UTF-8,所以是网页。

要解决这个问题,在我做出我使用的数据库的任何呼叫:

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

我在想,如果有上面做,而不必每次查询之前设置的名称更好/更简单的方法?

+0

所以, 'SET NAMES utf8'修复了这个问题吗? (所有不错的DB库允许设置客户端编码,请检查你的文档。) – 2013-03-13 15:11:32

+0

Set set names确实解决了这个问题,我只是想知道是否有更好的方法。 – panthro 2013-03-13 15:23:37

+1

您只需要每个连接一次,而不是每个查询之前。另外,如果您使用[PDO](http://php.net/pdo),则可以对其进行配置,以便它自动为您执行此操作。 – 2013-03-13 15:25:39

回答

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 
+0

但是我在不同的模型中有很多数据库连接,如果你不在每个模型之前调用集合名称,它不起作用。 – panthro 2013-03-13 15:29:56

+0

PDO提供了一种设置编码的更好方法。我们并不知道他是否在使用PDO:他没有说过。 – 2013-03-13 15:33:22

+0

@ÁlvaroG.Vicario对,我在我的文章中添加了连接字符串的方式。 – zessx 2013-03-13 15:45:32