C#在SQL Server中存储文本以进行全文搜索

时间:2012-01-30 13:37:33

标签: c# sql-server unicode

我根据某些参数编写了一个Outlook加载项来存档电子邮件。

我目前将Outlook.MailItem.Body属性存储在SQL Server 2008R2的varbinary(max)字段中。我也在这个专栏上启用了FTS。

目前,我将电子邮件的Body属性存储为数据库中的字节数组,并使用ASCIIEncoder.GetBytes()函数转换此明文。目前我遇到了一些奇怪的结果,我偶尔会注意到?字符的撇号和新行。

我有两个问题:

  1. 这是在数据库中存储文本的最佳方法吗?作为字节数组? ASCIIEncoder是实现这一目标的最佳方法吗?
  2. 我想正确处理Unicode字符串,有什么我应该注意的吗?

2 个答案:

答案 0 :(得分:2)

我不确定FullTextSearch是否在VarBinary列上效果最好,虽然我的直觉说" no"但我可以回答你问题的后半部分。

您获取奇数字符的原因是ASCIIEncoder.GetBytes()将文本视为ASCII,如果您正在编码ISN' T ASCII-的文本,则可能会出现这类错误编码。默认情况下,.NET中的字符串是UTF8,因此您可能会遇到问题。使用Encoding.UTF8.GetBytes()获取UTF8字符串的字节。

这也回答了第二个问题 - 这个方法对Unicode字符串有用吗?是的,因为你根本不存储字符串。您存储的字节,您的应用程序恰好知道的是编码的Unicode字符串。 SQL不会对它们做任何事情,因为它们只是字节。

答案 1 :(得分:2)

由于您必须支持Unicode字符并仅处理文本,因此您应将数据存储在nvarchar类型的列中。这将解决你的两个问题:

1。)文本在数据库中保存为可变长度的Unicode字符数据,您不需要字节编码器/解码器来检索数据

2。)见1.)