【问题标题】:C# storing text in SQL Server for full text searchC# 在 SQL Server 中存储文本以进行全文搜索
【发布时间】:2012-02-22 07:08:36
【问题描述】:

我正在编写一个 Outlook 插件来根据某些参数归档电子邮件。

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

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

我有两个问题:

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

【问题讨论】:

    标签: c# sql-server unicode


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您提供有关 varbinary 的额外信息,我正在讨论该走哪条路。
    【解决方案2】:

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

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

    2.) 见 1.)

    【讨论】:

    • 我感觉最初决定使用 varbinary 是为了支持 HTML 文本,但是我不再关心 HTML,而是希望只存储纯文本表示。我可以试试这个
    • 此解决方案将允许存储 HTML 文本,即使您不需要它。
    猜你喜欢
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2013-04-19
    • 2012-05-07
    相关资源
    最近更新 更多