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

标签 c# sql-server unicode

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

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

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

我有两个问题:

  1. 这是在数据库中存储文本的最佳方法吗?作为字节数组? ASCIIEncoder 是实现这一目标的最佳方法吗?
  2. 我想正确处理 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/

相关文章:

c# - 将 ASP.NET Repeater 控件与 List<T> 对象数据一起使用

java - Spring Integration - Microsoft SQL Server 2012 的消息存储配置

mysql - 使用 SQL 进行嵌套案例查询时出错

unicode - EM Dash #151 有什么区别?和#8212;?

c# - 如何在 UITableView 上显示 JSON 数据

c# - 正在安装Braintree软件包,但出现错误消息“软件包Naxam.BrainTreeCore.iOS 4.8.2与netstandard2.1不兼容”

perl - 如何在 Perl 中将命令行参数视为 UTF-8?

java - Spring mvc jackson json 映射器-如何将 unicode 编码应用于 json 响应中的特殊字符

c# - Microsoft.Web.管理: System. UnauthorizedAccessException

sql-server - 从 Windows Phone 访问桌面上的文件和数据库