Sql Varchar(max)中的XML文本神秘问号

Sql Varchar(max)中的XML文本神秘问号,sql,.net,sql-server,xml,vb.net,Sql,.net,Sql Server,Xml,Vb.net,我在VB.NET类库中有一个函数,它将XML文本插入VARCHARMAX列。 该列的结果是额外的?在列中数据的前面。我不希望在我的数据中使用该字符 列数据以如下方式开始: ?<?xml version="1.0" encoding="utf-8"?><Registration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance".... 该表有两列,数据和ID 我做错什么了吗。XML由.Net XmlSerialize

我在VB.NET类库中有一个函数,它将XML文本插入VARCHARMAX列。 该列的结果是额外的?在列中数据的前面。我不希望在我的数据中使用该字符

列数据以如下方式开始:

  ?<?xml version="1.0" encoding="utf-8"?><Registration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"....
该表有两列,数据和ID

我做错什么了吗。XML由.Net XmlSerializer创建


谢谢

Varchar只能保存ascii代码页中的字符。我猜字符串的开头应该有一些unicode字符


切换到nvarchar,您将不会删除该初始字符,但也不会丢失它首先,SQL Server中的所有XML都是Unicode UCS-2格式的,准确地说,数据访问库可能知道这一点。因此,将它们的输出存储在varchar列中并不是最好的主意——您可能会遇到隐式转换等各种问题。尝试将列数据类型切换为nvarchar,看看是否有帮助

第二,它可能是一些通常在UTF-8中存储的磁盘文件中找到的标记字节。由于SQL Server不支持这种编码,这些字节可能已被再次转换,隐式转换为无法读取的内容。尝试类似以下查询的操作:

select cast(substring(XMLField, 1, 10) as varbinary)
from dbo.MyTable;
它至少会显示这些字符的ASCII码


然而,我最好的猜测是完全摆脱UTF-8——在SQL Server中存储此类数据的唯一方法是通过varbinary列,但我怀疑您是否会喜欢由此产生的开销。尝试切换到UTF-16-它与UCS-2向后兼容,除非您处理的是真正的异国情调。

如果它看起来像XML,庸医像XML,闻起来像XML。。。。。。。你到底为什么不把它存储在XML列中!???!!?!总的猜测,但是XML在开始时是用字节顺序标记BOM编码的吗?您能否在调试器中判断插入的数据在进入数据库之前是否具有此额外字符?请尝试NVARCHAR。你那里有东西。它甚至可能是varchar中没有的空白。@marc_s,理论上你是正确的,但在MSSQL中,目前无法存储XML及其处理指令,如所提供的示例中所示。这是不正确的。Varchar和char将使用256个字符的代码页,如Windows-1252或CP-1252。
select cast(substring(XMLField, 1, 10) as varbinary)
from dbo.MyTable;