2011-11-17 52 views
2

我在.Net中完成了这项工作,但我对PHP有点新,可以使用一些帮助。我试图从MSSQL数据库中获取PHP中的数据,其中一些是希腊字母。 MSSQL列的数据类型为nvarchar,希腊字符在管理工作室中正确显示;然而,每当我在php中使用sqlsrv_query函数获取数据时,我会得到一堆问号。使用PHP检索MSSQL数据库中的希腊字母

sqlsrv_connect函数我试过设置CharacterSet"=>"UTF-8哪个不起作用。
我试过iconv(),但我不确定要使用哪些设置。
我试过mb_detect_encoding(),它返回ASCIIASCII

下面是一些示例代码:

public function _getOrderItemDetails($orderItemIds,$productTypeId){ 
    $params = explode(',', $orderItemIds); 

    $sql = "select od.*, ofs.Sort 
      from orderDetail od 
       left join orderFieldSort ofs on ofs.fieldName = od.name and productTypeId in ($productTypeId) 
      where orderItemid in (".rtrim(str_repeat('?,', count($params)),',').") 
      order by ofs.sort"; 

    return $this->_compileResults($sql,'OrderDetail',$params);; 
} 

private function _compileResults($sql,$classType,$params){  
    $result = sqlsrv_query($this->conn,$sql,$params); 

    $arrayResult = array(); 
    while($orderObject = sqlsrv_fetch_object($result,$classType)){ 
     array_push($arrayResult, $orderObject); 
    } 
    return $arrayResult; 
} 

任何建议都欢迎。请帮忙!

回答

0

有些事情可能会尝试。

1)你能确切地验证你的数据库编码是什么字符吗?我推荐UTF8的一切,因为它应该处理最广泛的字符。 “ASCIIASCII”不是我认识的字符编码,你的意思是“ASCII”吗?

2)尝试使用mysql_set_charset('utf8');更改字符集以匹配您的数据库编码。它“设置当前连接的默认字符集。”从当前的PHP脚本。 PHP official docs

3)这是一个异常值,但你在哪里查看结果?如果您在Web浏览器中查看结果,则无关从数据库返回的数据,如果这是与从db返回的字符集错过匹配,则需要确保页面在头部具有适当的章程编码集它可以导致问号或钻石......通常这样的事情

<head> 
    <title>page title</title> 
    <meta charset="UTF-8" /> 
    </head> 
0

我跟你有完全一样的问题,所以,当我在寻找,找到解决方案,我看到了你的question.The答案其实很简单。我想你的代码中的某处连接到数据库的代码如下:

$serverName = "YOUR_SERVER"; 
$connectionInfo = array("Database"=>"YourDatabase"); 
$link = sqlsrv_connect($serverName,$connectionInfo); 
if(!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

使gre EK字符显示你需要改变2号线,从:

$connectionInfo = array("Database"=>"YourDatabase"); 

到:

$connectionInfo = array("Database"=>"YourDatabase","CharacterSet"=>"UTF-8"); 

,其余代码保持不变。 这个解决方案是由@Graham提出的,他认为他自己的问题,它来自这里:Greek character insertion in php compared to SQL server management studio