【问题标题】:How do you store a paragraph in a database?如何将段落存储在数据库中?
【发布时间】:2011-05-01 21:49:51
【问题描述】:

我正在构建一个站点,其中包括用户提交 cmets。现在,想要保存不同的 cmets .. 我读了一些关于 Linq to SQL 和 ADO 的文章 .. 他们都在谈论存储少量信息,如姓名、电子邮件、密码等。但是保存消息的最有效方法是什么(其中最后会被合并到 youtube 之类的页面中吗?

【问题讨论】:

  • 这里的编码/文化是个问题吗?
  • @Caspar:为什么会是个问题?
  • @Matti Virkkunen 取决于您要存储的字符 nvarchar 或 varchar 可能会有所不同。
  • @Caspar:使用文本数据类型的非n 变体有什么好处吗?
  • @Caspar:实际上nvarchar(MAX) 仅限于大约 2 GB 的数据。

标签: c# asp.net database


【解决方案1】:

我认为网页上的 cmets 仍然算作“小块”。只需确保您的数据库字段有足够的空间(nvarchar(MAX) 如果支持,否则textntext,取决于您选择的数据库)

我认为您不需要开始考虑其他访问数据的方法,除非您每个对象有几十 KB 的数据,或者每页有非常多的对象。

【讨论】:

  • 我应该使用字符串生成器..还是其他编码方法..来防止字符串被算作一个对象?
  • @Dmitry:我不知道你想说什么。需要详细说明吗?
【解决方案2】:

完全一样。您还希望在将消息插入数据库之前对其进行 html 编码,以避免不必要的 sql 注入。 Linq 没有这样的问题,因为它使用参数来插入你的文本。

您应该更喜欢基于参数的文本插入,而不是嵌入的 sql + 编码。

【讨论】:

  • 我认为您不应该对数据库中的任何内容进行 HTML 编码,您需要在输出端进行编码,以便之后轻松更改格式/过滤。
  • 您应该始终使用基于参数的方法(相对于嵌入式 SQL)。所以不需要编码。
  • 即使使用基于参数的 sql,您仍然需要扫描和检查 XSS 和其他此类烦人的攻击向量。我会使用 nvarchar 以便为 i18N 做好准备。
  • 您确实不想在存储之前进行编码,您想在显示之前进行编码,即在您将其从数据库中取回之后并将其嵌入页面之前。这具有三个优点 - 1)您不会将自己限制在输出的位置,例如,如果您使用 HtmlEncode,您将无法在 RSS 中使用它,其中 XmlEncoding 规则不同;2)如果编码功能有一个错误并已修补,您将获得修补程序,而不必通过数据库,取消编码然后重新编码和 3) 更容易搜索。始终在渲染点进行编码。
【解决方案3】:

过去,您会使用已弃用的 Text 数据类型,但它将在下一个版本中删除,因此建议使用 varchar(max) .

【讨论】:

  • 我的建议是,他必须使用 nvarchar(max)
  • Text 已经被弃用,并且自 SQL Server 2005 以来一直被弃用。你的意思是 Text 将在下一个版本中被删除。
  • @Muhammad:是否使用 UCS-2 (nvarchar) 是一个不同的问题 - 有些人建议始终选择 unicode(如果愿意,选择最低公分母)和一些建议根据情况选择类型。无论哪种方式,建议将最大存储大小设置为“最大”。
【解决方案4】:

您也可以使用ntext 数据类型。我将它用于文本。

【讨论】:

  • 微软建议使用nvarchar(MAX) 而不是ntext
【解决方案5】:

MSSQL 数据库中有一个text 数据类型。您可以将其用于 cmets。那么在程序中,它只是一个普通的字符串。

编辑:由于 text 将被弃用,只需按照其他人所说的那样使用 varchar(max)

【讨论】:

  • 文本将在 Sql Server 的下一版本中被弃用。
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多