为什么SQL Server Express在php中使用替换字符65533进行回复?

时间:2014-05-27 15:31:10

标签: php sql sql-server special-characters

我在linux上运行了一个php脚本,它使用php mssql驱动程序查询在我的开发机器(windows)上运行的MSSQL Server Express数据库。

我能够连接并选择数据库,并且没有错误。

我将查询直接放入MS SQL Server Management Studio的查询窗口中,然后我得到了正确的数据。但是,如果我从我的PHP脚本运行相同的查询,那么返回的数据会有一堆"替换字符",在此描述:http://www.fileformat.info/info/unicode/char/0fffd/index.htm

看起来像这样:�

例如,在查询ID列表时,例如" SELECT DISTINCT PageId FROM Pages",查询窗口将按以下格式显示ID列表:

C961277D-D8BE-4337-82CF-003F6E7951E2

但是,当我在PHP中运行相同查询时,结果如下:

' k @ T @ /

我获得了相同数量的结果,因此SQL Server接口正确地解释了查询,但在结果中,字符长度错误,没有字符匹配,格式错误。有人知道发生了什么事吗?

感谢您的帮助。

此处的相关代码:

$this->connection = mssql_connect(
    $this->configuration['servername'],
    $this->configuration['username'],
    $this->configuration['password']);

$query = 'SELECT DISTINCT PageId FROM sf_CmsCtrlLinks';     

$result = mssql_query($query);

while ($row = mssql_fetch_object($result)){

    // Results in "page ID: 7��"�O�5,���"   
    echo "page ID: " . $row->PageId;

}

1 个答案:

答案 0 :(得分:0)

SQL Server以二进制格式将GUID返回给PHP。

如果您希望它作为可读格式,您可以让MSSQL以字符串形式将其传回给您;

SELECT DISTINCT CONVERT(VARCHAR(38), PageId) as PageId FROM pages

如果你不需要它们可读,不要将它们转换为仅仅使用它们作为"不透明的" id应该没有问题。

我无法自己测试,但mssql_guid_string()也可以将它们转换为可读形式。