php和mssql / sqlsrv - 包含问号而不是重音字符的列名

时间:2012-03-29 15:41:21

标签: php sql-server utf-8

我正在尝试将某些报告从MSSQL 2005数据库转储到HTML,但是在尝试显示列名称(而不是列数据本身,正确显示)时出现了一个小问题在它们中加入了重音字符 - 它们被问号代替。

我在PHP下使用sqlsrv驱动程序,在IIS7下运行。 PHP脚本本身是UTF-8编码的。我正在连接到SQL服务器:

  $connection_info = array("Database" => "ProjectManager", "UID" => DB_USER, "PWD" => DB_PASS , "CharacterSet" => "UTF-8");
  $conn = sqlsrv_connect(DB_HOST, $connection_info) or die("FAIL");

运行查询后的第一件事是将列名转储到表中:

$qry = "EXEC [dbo].[dummy_report] @year=2012, @month=3";
$res = sqlsrv_query($conn, $qry);
foreach(sqlsrv_field_metadata($res) as $fieldData) {
    echo "<th>".$fieldData['Name']."</th>";
}

这足以处理存储在数据库中的数据;列名 - 不是那么多:

enter image description here

通常情况下,我不打算在斯洛伐克语中命名数据库列,但我只是想显示存储过程的结果,我不太习惯将这些字段名称硬编码到PHP脚本中。

所以,charsets。 Wat do?

1 个答案:

答案 0 :(得分:1)

我遇到了和你一样的问题。经过大量的谷歌搜索后,它变成了“用于SQL Server的PHP的Microsoft驱动程序”的BUG。

在此处查看更多信息:PHP sqlsrv 3.0.1 Driver: sqlsrv_field_metadata returns column name as char*, so unicode column names can't be fetched correctly