我试图从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获得正确的结果?