我试图将重音字符插入到编码为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
我该如何解决? 可能是我的错误?
谢谢!
答案 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开放,非常奇怪。