Mysql存储不正确的编码字符

Jac*_*rky 0 php mysql encoding utf-8

我正在尝试使用编码将重音字符插入到mysql表中utf8_general_ci.

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

Porto leça da palmeira
Run Code Online (Sandbox Code Playgroud)

要插入该字符串,我将以这种方式使用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);
Run Code Online (Sandbox Code Playgroud)

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

Porto - Le?Ãa da Palmeira
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用utf8_encode如下:

$string = utf8_encode($string);
Run Code Online (Sandbox Code Playgroud)

它将以这种方式存储:

Porto - Le?ßa da Palmeira
Run Code Online (Sandbox Code Playgroud)

我怎么解决?可能是我的错误?

谢谢!

Fun*_*ner 5

(根据建议我把我的评论作为答案)

使用

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

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

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

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


我可能还建议您使用占位符而不是变量.有关这些语句的更多信息,请参阅PDO准备语句.即使你正在使用PDO,你仍然可以接受SQL注入,奇怪的是.