我正在编写一个 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 不会对它们做任何事情,因为它们只是字节。
关于C# 在 SQL Server 中存储文本以进行全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064727/