我正在尝试使用编码 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
我该如何解决? 我的错误可能是什么?
谢谢!
最佳答案
(按照建议我把我的评论作为答案)
使用
$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 持开放态度,很奇怪。
关于php - Mysql存储不正确的编码字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564035/