C#在SQL Server中存储文本以进行全文搜索
本文关键字:文搜索 搜索 SQL Server 文本 存储 | 更新日期: 2023-09-27 18:21:48
我正在编写一个Outlook外接程序,以根据某些参数对电子邮件进行存档。
我当前正在将Outlook.MailItem.Body
属性存储在SQL Server 2008R2中的varbinary(max)
字段中。我也在本专栏中启用了FTS。
目前,我将电子邮件的Body属性作为字节数组存储在数据库中,并使用ASCIIEncoder.GetBytes()
函数转换此明文。目前,我遇到了一些奇怪的结果,我偶尔会注意到撇号和新行的?
字符。
我有两个问题:
- 这是在数据库中存储文本的最佳方法吗?作为字节数组?ASCIIEncoder是实现这一目标的最佳方法吗
- 我想正确处理Unicode字符串,有什么需要我注意的吗
我不确定FullTextSearch是否在VarBinary列上效果最好,尽管我的直觉是"不",但我可以回答你问题的后半部分。
你得到奇数字符的原因是ASCIIEncoder.GetBytes()将文本视为ASCII,如果你编码的文本不是ASCII编码的,则可能会出现这些错误。默认情况下,.NET中的字符串是UTF8,所以您可能会遇到问题。使用Encoding.UTF8.GetBytes()
获取UTF8字符串的字节数。
这也回答了第二个问题——这种方法对Unicode字符串有用吗?是的,因为您根本没有存储字符串。您正在存储字节,而您的应用程序恰好知道这些字节是编码的Unicode字符串。SQL不会对它们做任何事情,因为它们只是字节。
由于必须支持Unicode字符并只处理文本,因此应将数据存储在类型为nvarchar
的列中。这将解决您的两个问题:
1.)文本在数据库中保存为可变长度的Unicode字符数据,您不需要字节编码器/解码器来检索数据
2.)参见1.)