【发布时间】:2011-03-28 21:14:07
【问题描述】:
当使用 PDO_ODBC 和以下代码从 PHP 访问 Microsoft SQL 数据库时,我遇到了编码问题。从数据库输出的文本是乱码。
$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;charset=UTF-8";
$pdo = new PDO($dsn,$username,$password);
$sql = "SELECT text FROM atable";
$result = $PDO->query($sql);
while($data = $result->fetchObject()){
$values[] = $data->text;
}
dpm($values);
(来源:bayimg.com)
这是通过 Drupal 模块完成的。 Drupal 中的所有内容都可以使用 UTF-8。最干净的解决方案是能够以 UTF-8 从数据库中检索数据,或者在输出之前将其转换为 UTF-8。
我试过这些都没有成功
$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;client_charset=utf-8"$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;charset=utf-8"-
$pdo->exec('SET NAMES utf8')在new PDO(...)之后 -
$pdo->exec('SET CHARACTER SET utf8');在new PDO(...)之后
PS:代码目前是在 Windows 上开发的,但它也必须在 GNU/Linux 上运行。
【问题讨论】: