php - Mysql存储不正确的编码字符

标签 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

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

谢谢!

最佳答案

(按照建议我把我的评论作为答案)

使用

$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/

相关文章:

PHP 重定向停止工作?

java - 使用 URL.openStream() 下载的 HTML 内容始终包含无效字符

php - 奇怪的 session 行为(文件名字符串长度)

facebook api 中的 php cURL 错误

mysql - 使用不同表中多行的信息更新一个表行

php - ADODB 获取列数

java - 如何存储可能包含二进制数据的 Http Response?

encoding - PDFBox - 如何将编码从 WinAnsiEncoding 更改为 Unicode?

javascript - 在 Silverstripe 中将屏幕宽度传递给 Controller

php - 需要每周重置数据库表