2012-02-15 31 views
0

我在SQL服務器存儲符號像ρπΩ÷√νƞμΔΥᵨλθ→在SQL Server中的XML%°

select cast('<Answers> 
    <AnswerDescription> ϱπΩ÷√νƞµΔϒᵨλθ→%° </AnswerDescription> 
</Answers>' as xml) 


select ' ϱπΩ÷√νƞµΔϒᵨλθ→%°' 

跑這些奎雷斯,得到了以下結果

<Answers> 
     <AnswerDescription> ?pO÷v??µ??????%° </AnswerDescription> 
    </Answers> 

和 「?寶÷ v?μ??????%

如何使我的SQL服務器存儲或顯示這些值,因爲它們是從應用程序發送?

+0

你確定所有涉及的是UTF-8啓用?它可能只是應用程序無法打印它。 – Thilo 2012-02-15 09:03:49

+0

該應用程序是UTF-8我測試了它,但正如我上面所述,SQL服務器給了我這些結果。有沒有一種方法可以更改我的SQL服務器以支持這些符號。 – Nikshep 2012-02-15 09:05:39

回答

4

在SQL Server中,標量字符串值默認轉換爲VARCHAR

你舉的例子可以通過開單引號前添加N作出指示所字符串應該爲NVARCHAR對待工作:

select cast(N'<Answers> 
    <AnswerDescription> ϱπΩ÷√νƞµΔϒᵨλθ→%° </AnswerDescription> 
</Answers>' as xml) 

select N' ϱπΩ÷√νƞµΔϒᵨλθ→%°' 

如果這些字符串被錯誤地存儲在數據庫中,它是可能在插入過程中的某個時刻,它們被隱式轉換爲VARCHAR(例如INSERT)。它們也可能被正確存儲,並在檢索時轉換爲VARCHAR(例如SELECT)。

如果在顯示如何插入數據和目標表的數據類型的問題中添加一些代碼,應該可以提供更詳細的幫助。

+0

感謝Ed在指向我時正確的方向插入我們將XMl作爲varchar現在我們將其更改爲文本,並且它工作正常。那麼兩者有什麼區別? – Nikshep 2012-02-15 09:40:27

+0

@Nikshep - 不要使用'text' - 這是SQL 2008中不贊成使用的類型 - 使用'NVARCHAR(MAX)'或SQL Server的內置'XML'類型。 – 2012-02-15 12:50:58

0

我相信它的問題與incorectly設置字符集, 更改charecter設置爲UTF8。 我只是測試它在我的MySQL數據庫,我改變了使用

ALTER TABLE `tab1` CHANGE `test` `test` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL 

工作字符集爲utf8斌沒有任何問題

+0

問題與MS SQL Server 2008相關 - 不支持此語法 – 2012-02-15 09:27:35

+0

對不起,沒有注意到 – 2012-02-15 09:40:33

相關問題