2012-01-30 2 views
2

Im пишет надстройку Outlook для отправки электронных писем в соответствии с определенными параметрами.C# сохранение текста в SQL Server для полнотекстового поиска

В настоящее время я сохраняю объект Outlook.MailItem.Body в поле varbinary(max) в SQL Server 2008R2. Я также включил FTS в эту колонку.

В настоящее время я сохраняю свойство Body email в виде байтового массива в базе данных и использую функцию ASCIIEncoder.GetBytes() для преобразования этого чистого текста. В настоящее время я испытываю некоторые странные результаты, из-за которых я иногда замечаю ? персонажей для апострофов и новых линий.

У меня есть два вопроса:

  1. Это лучший способ для хранения текста в базе данных? Как массив байтов? И является ли ASCIIEncoder лучшим методом для этого?
  2. Я хочу правильно обрабатывать строки Unicode, есть ли что-нибудь, о чем я должен знать?

ответ

2

Я не уверен, работает ли FullTextSearch лучше всего в столбцах VarBinary, хотя мой инстинкт говорит «нет», но я могу ответить на вторую половину вашего вопроса.

Причина, по которой вы получаете нечетные символы, заключается в том, что ASCIIEncoder.GetBytes() обрабатывает текст как ASCII и может иметь точно такие ошибки, если текст, который вы кодируете, не кодируется ASCII. По умолчанию строки в .NET являются UTF8, поэтому вы, вероятно, сталкиваетесь с проблемами там. Используйте Encoding.UTF8.GetBytes(), чтобы получить байты для строки UTF8.

Это также отвечает на второй вопрос - этот метод полезен для строк Unicode? Да, поскольку вы вообще не храните строки. Вы храните байты, которые, как известно вашему приложению, являются закодированными строками Unicode. SQL ничего не сделает с ними, потому что они просто байты.

+0

Спасибо за дополнительную информацию о varbinary, я обсуждал, как идти. – Simon

2

Поскольку вы должны поддерживать символы Unicode и обрабатывать только текст, вы должны хранить свои данные в столбце типа nvarchar. Это будет касаться и ваших проблем:

1.) Текст сохраняется в переменной длины Unicode символьных данных в базе данных, вам не нужен байт кодер/декодер для извлечения данных

2.) См. 1.)

+0

У меня есть ощущение, что первоначальное решение использовать varbinary было поддержкой HTML-текста, однако я больше не интересуюсь HTML и хочу просто сохранить представление обычного текста. Я могу просто попробовать это сделать – Simon

+0

Это решение позволит хранить текст в формате HTML, даже если вам это не нужно. – EBarr

Смежные вопросы