2011-07-15 59 views
1

正確我在PHP中運行一個mssql存儲過程,重音字符似乎返回爲? 存儲過程是Mssql查詢返回?代替重音字符

ALTER PROCEDURE [dbo].[dbname] 
@ProjectID AS int 
AS 
SELECT ProjectName COLLATE SQL_Latin1_General_CP1_CI_AS AS ProjectName, 
CustomerName COLLATE SQL_Latin1_General_CP1_CI_AS AS CustomerName 
FROM Project 
WHERE ProjectID = @ProjectID 
END 

我與這個PHP是(顯示的返回值是ABCDĒčďāĀÖØÖÖÃēù)

$dbhandle = mssql_connect($myServer, $myUser, $myPass) 
    or die("Couldn't connect to SQL Server on $myServer"); 
$selected = mssql_select_db($myDB, $dbhandle) 
    or die("Couldn't open database $myDB"); 
$stmt=mssql_init("select.Project", $dbhandle); 
$desktopid = $_GET['desktopid']; 
$compid = 0; 
$custid = 0; 
mssql_bind($stmt, "@ProjectID", $desktopid, SQLINT4, FALSE, FALSE); 
$result = mssql_execute($stmt); 
$row = mssql_fetch_assoc($result); 
echo $row['ProjectName'];   ==== ABCD???????????? 
utf8_decode($row['ProjectName']); ==== ABCD???????????? 
utf8_encode($row['ProjectName']); ==== ABCD???????????? 

我可以用一隻手做搞清楚如何字符解碼的功能返回我沒有找到其他來源的幫助,我甚至嘗試了從堆棧溢出的幾個修復無濟於事。

也請注意,如果我有選擇,我會使用與PHP的MySQL不MSSQL和我有PHP的Debian服務器

+0

答案是將數據庫設置爲用什麼編碼? UTF-8? – Steven

+0

數據庫的排序規則是SQL_Latin1_General_CP1_CI_AS,但是對於編碼我不知道如何發現這個問題 – Lukosanthropos

+0

SQL Server中的問號通常意味着有人試圖將unicode字符串存儲在varchar列中。如果您使用varchar作爲列ComputerName和ProjectName,則可以嘗試將它們更改爲nvarchar。 –

回答