【问题标题】:Storing Symbols like ϱπΩ÷√νƞµΔϒᵨλθ→%° in SQL Server XML在 SQL Server XML 中存储符号,如 ϱπΩ÷√νƞµΔϒᵨλθ→%°
【发布时间】:2012-02-15 09:00:48
【问题描述】:

我在我的 SQL 服务器中运行了这些查询

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


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

并得到以下结果

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

和 " ?pO÷v??µ??????%°"

如何让我的 SQL 服务器存储或显示这些从应用程序发送的值?

【问题讨论】:

  • 您确定所涉及的所有内容都启用了 UTF-8 吗?可能只是应用程序无法打印。
  • 应用程序是 UTF-8 我测试了它,但正如我上面所说的 SQL 服务器给了我这些结果。有没有办法可以更改我的 SQL 服务器以支持这些符号。

标签: sql xml sql-server-2008


【解决方案1】:

在 SQL Server 中,标量字符串值默认转换为 VARCHAR

您的示例可以通过在开头的单引号前添加N 来指示字符串应被视为NVARCHAR 来工作:

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

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

如果这些字符串被错误地存储在数据库中,它们很可能在插入期间的某个时间点被隐式转换为 VARCHAR(例如 INSERT)。它们也有可能被正确存储并在检索时转换为VARCHAR(例如SELECT)。

如果您在问题中添加一些代码,显示您如何插入数据和目标表的数据类型,则应该可以提供更详细的帮助。

【讨论】:

  • 感谢 Ed 在插入时为我指出了正确的方向,我们将 XMl 转换为 varchar 现在我们将其更改为文本,它工作正常。那么这两者有什么区别呢?
  • @Nikshep - 不要使用 text - 这是 SQL 2008 中不推荐使用的类型 - 使用 NVARCHAR(MAX) 或 SQL Server 的内置 XML 类型。
【解决方案2】:

我相信它的问题是字符集设置不正确, 将字符集更改为 UTF8。 我刚刚在我的 MySQL 数据库上对其进行了测试,我使用

将字符集更改为 utf8-bin
ALTER TABLE  `tab1` CHANGE  `test`  `test` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

正常工作

【讨论】:

  • 问题与 MS SQL Server 2008 相关 - 不支持此语法
猜你喜欢
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2014-04-27
  • 2011-04-26
  • 1970-01-01
  • 2018-12-05
相关资源
最近更新 更多