2011-11-17 81 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