Pie*_*yle 7 php odbc pdo drupal
使用带有以下代码的PDO_ODBC从PHP访问Microsoft SQL数据库时,我遇到了编码问题.当输出时,DB中的文本出现乱码.
$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);
Run Code Online (Sandbox Code Playgroud)
乱码输出http://image.bayimg.com/naomcaacd.jpg
这是从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上运行.
在Linux上运行并使用FreeTDS驱动程序时,可以使用文件中的client charset设置配置客户端的字符集freetds.conf.为了freetds.conf在使用PDO ODBC和unixODBC时使用该文件,需要使用ODBC组合配置来配置ODBC数据源.使用仅ODBC配置配置ODBC数据源时,freetds.conf不使用该文件.有了这个,我能够从/向MS SQL Server数据库中检索和插入UTF-8数据.
作为Linux/Unix的人,我无法理解/找到如何配置在Windows上使用PDO ODBC时使用的字符集的方法.我的含糊理解是,在系统级配置时,可以将ODBC数据源配置为使用de SQL Server数据库的charset或转换为客户端计算机字符集.