Mysql存储不正确的编码字符

时间:2014-07-03 22:11:45

标签: php mysql encoding utf-8

我试图将重音字符插入到编码为utf8_general_ci的mysql表中。

这是一个我试图插入的简单字符串:

Porto leça da palmeira

以这种方式使用php插入该字符串:

$string = "Porto leça da palmeira";
$id     = "xxxx";
$sql    = "INSERT INTO city_translates (id,city) VALUES ('$id','$string')";
$dbh = new PDO("mysql:host.....");  
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query($sql);

当我尝试从MysqlWorkBench访问该字符串时,它已经以这种方式存储:

Porto - Le?Ãa da Palmeira

如果我尝试使用utf8_encode,例如:

$string = utf8_encode($string);

它将以这种方式存储:

Porto - Le?ßa da Palmeira

我该如何解决? 可能是我的错误?

谢谢!

1 个答案:

答案 0 :(得分:5)

(正如建议我把我的评论作为答案)

使用

$dbh = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")); 

并将变量更改为您自己的变量。

您也可以使用$dbh->exec("set names utf8");

根据http://www.php.net/manual/en/ref.pdo-mysql.connection.php


我可能还建议您使用占位符而不是变量。 See PDO prepared statements了解有关这些的更多信息。即使您使用的是PDO,您仍然可以对SQL injection开放,非常奇怪。