C # хранение текста в SQL Server для полнотекстового поиска - PullRequest
2 голосов
/ 30 января 2012

Я пишу надстройку Outlook для файлов электронной почты в соответствии с определенными параметрами.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 января 2012

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

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

2.) См. 1.)

2 голосов
/ 30 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...