C#在SQL Server中存储文本以进行全文搜索
我正在根据某些参数将Outlook加载项写入电子邮件ACD文件 我当前正在SQL Server 2008R2的C#在SQL Server中存储文本以进行全文搜索,c#,sql-server,unicode,C#,Sql Server,Unicode,我正在根据某些参数将Outlook加载项写入电子邮件ACD文件 我当前正在SQL Server 2008R2的varbinary(max)字段中存储Outlook.MailItem.Body属性。我还在本专栏中启用了FTS 目前,我将电子邮件的Body属性存储为数据库中的字节数组,并使用ascienceorder.GetBytes()函数转换此明文。目前我遇到了一些奇怪的结果,我注意到撇号和新行中偶尔会出现?字符 我有两个问题: 这是在数据库中存储文本的最佳方法吗?作为字节数组?而电子订单是实现
varbinary(max)
字段中存储Outlook.MailItem.Body
属性。我还在本专栏中启用了FTS
目前,我将电子邮件的Body属性存储为数据库中的字节数组,并使用ascienceorder.GetBytes()
函数转换此明文。目前我遇到了一些奇怪的结果,我注意到撇号和新行中偶尔会出现?
字符
我有两个问题:
我不确定FullTextSearch是否在VarBinary列上工作得最好,尽管我的直觉是“不”,但我可以回答你问题的后半部分 获取奇数字符的原因是,ascienceoder.GetBytes()将文本视为ASCII,如果编码的文本不是ASCII编码的,则可能会出现类似的错误。默认情况下,.NET中的字符串是UTF8,因此您可能会遇到问题。使用
Encoding.UTF8.GetBytes()
获取UTF8字符串的字节
这也回答了第二个问题-此方法对Unicode字符串有用吗?是的,因为您根本不存储字符串。您正在存储字节,而您的应用程序恰好知道这些字节是编码的Unicode字符串。SQL不会对它们做任何事情,因为它们只是字节。我不确定FullTextSearch是否最适合VarBinary列,尽管我本能地说“不”,但我可以回答你问题的后半部分 获取奇数字符的原因是,ascienceoder.GetBytes()将文本视为ASCII,如果编码的文本不是ASCII编码的,则可能会出现类似的错误。默认情况下,.NET中的字符串是UTF8,因此您可能会遇到问题。使用
Encoding.UTF8.GetBytes()
获取UTF8字符串的字节
这也回答了第二个问题-此方法对Unicode字符串有用吗?是的,因为您根本不存储字符串。您正在存储字节,而您的应用程序恰好知道这些字节是编码的Unicode字符串。SQL不会对它们做任何事情,因为它们只是字节。因为您必须支持Unicode字符并只处理文本,所以您应该将数据存储在类型为
nvarchar
的列中。这将解决您的两个问题:
1.)文本作为可变长度Unicode字符数据保存在数据库中,您不需要字节编码器/解码器来检索数据
2.)请参见1。)由于您必须支持Unicode字符并仅处理文本,因此应将数据存储在
nvarchar
类型的列中。这将解决您的两个问题:
1.)文本作为可变长度Unicode字符数据保存在数据库中,您不需要字节编码器/解码器来检索数据
2.)参见1。)感谢关于varbinary的额外信息,我正在讨论该怎么办。感谢关于varbinary的额外信息,我正在讨论该怎么办。我感觉使用varbinary的最初决定是支持HTML文本,但我不再关心HTML,只希望存储纯文本表示。我可能只是尝试一下这个解决方案将允许存储HTML文本,即使您不需要它。我感觉使用varbinary的最初决定是支持HTML文本,但是我不再关心HTML,只希望存储纯文本表示。我可以尝试一下,这个解决方案将允许存储HTML文本,即使您不需要它。