2012-02-15 81 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