所见即所得字段的数据库设计

Database design of a WYSIWYG field

我有一个数据库字段需要存储来自 Web 界面中所见即所得输入框的文本和 HTML 标签。

文本最多可以包含 2000 个字符,但 HTML 标签可能会有所不同,具体取决于访问者是否使用所见即所得功能以及他使用该功能的程度。

我正在使用 MS SQL 服务器,但我觉得问题与数据库无关。

对于这个字段,我应该像下面这样使用 varchar varchara 4000(2000 个字符加上可能的 HTML 标签的 2000 个字符。但是 HTML 标签可能超过 2000 个字符,具体取决于对用户)?或者我应该使用文本或 lob 数据类型(可以存储无限数据)?

考虑到将有数亿条记录和高数据库保存和查询事务,实用和平衡的设计(性能、存储等)是什么?

非常感谢!

您应该使用 varchar(MAX)/nvarchar(MAX),它是 text/ntext 数据类型的继承者,因为它允许任意长度并且 does not produce additional overhead.您不会通过限制 (n)varchars 的大小来保存 space。

就个人而言,我会推荐 nvarchars 而不是 varchars。它们占用了 a bit more space,但是一旦您的用户开始输入非英文字符,您就可以省去很多麻烦。

请注意,您不能在 (n)varchar(MAX) 字段上创建索引。