使用pdo(odbc驱动程序)charset从linux连接到MSSQL Server

时间:2016-07-04 09:00:06

标签: php sql-server linux pdo encoding

我试图从linux连接到mssql windows数据库。

我已通过PDO ODBC驱动程序成功创建了连接。

驱动程序来自FreeTDS。

我的问题在于编码。 mssql数据库排序规则位于SQL_Latin1_General_CP1253_CI_AI中,表列具有相同的排序规则。

当我从Microsoft SQL Server Management Studio连接到数据库并运行查询时,我得到了正确的结果。

当我从linux服务器(带有pdo的php)进行查询时,字符不一样。

示例:

Correct Result => SMA
Incorrect Result (from php) -> S??

odbc.ini有以下几行

[SQLServer]
Driver=FreeTDS
Description=SQL Connect
Trace=Yes
Server=serverip
Port=1433
charset=UTF-8
Database=dbname
TDS_Version=8.0

odbcinst.ini有以下几行

[FreeTDS]
Description = tdsodbc
Driver = /usr/lib64/libtdsodbc.so.0
Setup = /usr/lib64/libtdsS.so.2
Trace=Yes
TraceFile=/tmp/freetds.log
FileUsage=1
UsageCount=1
client charset=utf-8

freetds.ini有以下几行

[SQLServer]
host=serveruo
port=1433
tds version=8.0

php code

try {
    $pdo = new PDO("odbc:SQLServer", $user, $pass);
} catch (PDOException $e) {
    echo "Failed to connect:" . $e->getMessage(); exit;
}
$results = $pdo->query("select ID,Descr from Suppliers", PDO::FETCH_OBJ);
foreach($results as $row) {
    echo $row->Descr;
    echo mb_detect_encoding($row->Descr, mb_detect_order(), true)
}

mb_detected_encoding结果是

ASCII

如何从php获得正确的结果?

0 个答案:

没有答案