我在VB .NET类库中有一个函数,它将XML文本插入VARCHAR(MAX)列。 该列导致额外的“?”在列的数据的前面。我不想在我的数据中使用该字符。
列数据的开头如下:
?<?xml version="1.0" encoding="utf-8"?><Registration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"....
插入功能是:
INSERT INTO Table (Data) OUTPUT Inserted.ID VALUES (@Data)
该表有2列,数据和ID。
我做错了什么。 XML由.Net XmlSerializer创建。
由于
答案 0 :(得分:0)
Varchar只能在ascii代码页中保存字符。我的猜测是你在该字符串的开头有一些unicode字符。
切换到nvarchar,你不会摆脱那个初始角色,但你也不会失去它
答案 1 :(得分:0)
首先,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(除非你处理真正的exotique)。