#c# #asp.net #database
#c# #asp.net #База данных
Вопрос:
я создаю сайт, который включает пользователя, отправляющего комментарии. Теперь я хочу сохранить разные комментарии.. я немного читал о Linq to SQL и ADO .. все они говорят о хранении небольших фрагментов информации, таких как имена, электронные письма, пароли и т.д. Но какой самый эффективный способ сохранить сообщения (которые будут включены на страницу, например, на YouTube) в конце?
Комментарии:
1. Является ли здесь проблемой кодировка / культура?
2. @Caspar: Почему это должно быть проблемой?
3. @Matti Virkkunen в зависимости от символов, которые вы хотите сохранить, nvarchar или varchar могут иметь значение.
4. @Caspar: Есть ли преимущество в использовании не
n
варианта текстовых типов данных?5. @Caspar: На самом деле
nvarchar(MAX)
объем данных ограничен примерно двумя гигабайтами.
Ответ №1:
Я думаю, что комментарии на веб-странице по-прежнему считаются «маленькими битами». Просто убедитесь, что в вашем поле базы данных достаточно места ( nvarchar(MAX)
если поддерживается, в противном случае text
или ntext
, в зависимости от выбранной вами базы данных)
Я не думаю, что вам нужно начинать рассматривать другие методы доступа к данным, если у вас нет десятков килобайт данных на объект или очень большого количества объектов на странице.
Комментарии:
1. должен ли я использовать string builder .. или другую кодировку method..to запретить считать строку объектом?
2. @Dmitry: Я понятия не имею, что вы пытаетесь сказать. Хотите уточнить?
Ответ №2:
Точно таким же образом. Вы также хотите закодировать свое сообщение в html перед вставкой его в базу данных, чтобы избежать нежелательных sql-инъекций. У Linq нет таких проблем, поскольку он использует параметры для вставки вашего текста.
Вы должны предпочесть вставку текста на основе параметров, а не встроенную кодировку sql .
Комментарии:
1. Я не думаю, что вам следует что-либо кодировать в HTML в базе данных, вы захотите выполнить кодирование на стороне вывода, чтобы впоследствии было легко изменить форматирование / фильтрацию.
2. Вы всегда должны использовать подход, основанный на параметрах (в отличие от встроенного SQL). Таким образом, кодирование не требуется.
3. Даже при использовании sql на основе параметров вам все равно нужно сканировать и проверять наличие XSS и других подобных раздражающих векторов атаки. Я бы использовал nvarchar so, чтобы быть готовым к i18N.
4. Вы не хотите кодировать перед сохранением, вы хотите кодировать перед отображением, то есть после того, как вы вернете его из базы данных и перед тем, как встроить его в страницу. У этого есть три преимущества — 1) Вы не ограничиваете себя тем, где он выводится, например, если вы кодируете HtmlEncode, вы не сможете использовать его в RSS, где правила кодирования XmlEncoding отличаются, и 2) если функция кодирования содержит ошибку и исправлена, вы получите исправление, вместо того, чтобы проходить через базу данных, откодировать, а затем перекодировать и 3) проще в поиске. Всегда кодируйте в момент рендеринга.
Ответ №3:
В былые времена вы бы использовали устаревший тип данных Text, но он будет удален в следующей версии, поэтому рекомендуется использовать varchar (max).
Комментарии:
1. моя рекомендация заключается в том, что он должен использовать nvarchar (максимум)
2. Текст уже устарел, начиная с SQL Server 2005. Вы имеете в виду, что текст будет удален в следующей версии.
3. @Muhammad: используете ли вы UCS-2 (nvarchar) или нет (varchar) — это другой вопрос — некоторые рекомендуют всегда выбирать unicode (выбирая наименьший общий знаменатель, если хотите), а некоторые рекомендуют выбирать тип в зависимости от обстоятельств. В любом случае, рекомендуется установить максимальный размер хранилища равным «max».
Ответ №4:
вы также можете использовать ntext
тип данных. Я использую это для текста.
Комментарии:
1. Microsoft рекомендует использовать
nvarchar(MAX)
вместоntext
.
Ответ №5:
В базе данных MSSQL есть text
тип данных. Вы можете использовать его для комментариев. Тогда в программе это просто обычная строка.
Редактировать: Поскольку text
он устареет, просто используйте varchar(max)
так, как говорят другие.
Комментарии:
1. текст будет устаревшим в следующей версии Sql Server.