javascript - 在数据库中存储格式化内容的标准方法是什么?

标签 javascript html sql-server asp.net-mvc database

我有一个应用程序涉及使用所见即所得的 html 编辑器存储和检索大量用户格式的内容。有点像 SO 如何保存格式化的问题和答案。

执行此操作的标准方法是什么?

编辑:

澄清一下:我不是在询问要存储在数据库中的数据类型。相反,我关心的是在数据库中存储带有样式信息的 html 标签 block 。

最佳答案

这只是文本数据。通常 VARCHAR 是最好的。

更新: 是的,如果您想支持 Unicode(在这种情况下您可能会这样做),那么请将其设为 NVARCHAR

至于 OP 更新,你想象的困难实际上并不存在。 HTML 是文本数据,因此它进入文本字段。您根本不想将格式与文本分开。

这就是答案,但您对此事的担忧还没有结束。这样做困扰您的原因可能是因为数据库使用结构化数据(所有数据都在命名和类型化的列中),而这是非结构化内容。这意味着该字段中的数据没有以数据库友好的方式存储。您应该尝试尽可能多地构建您的数据,因为它允许您通过字段值快速搜索。我们将用户键入的任何内容都扔到该字段中,如果我们需要在该字段中查找数据,我们将需要搜索整个字段才能找到它。这是一个非常缓慢的过程,更糟糕的是,我们不仅要搜索文本,还要搜索该文本的格式。

这都是真的,但并不好,所以我们应该尽可能避免这样做。如果您可以避免让用户输入自由格式的文本,那么请务必这样做。从那时起,您可以以快速一致的方式将 HTML 格式应用于客户端应用程序中的数据。

但是,这个问题的基础是您想要一个非结构化内容的字段,并且您在询问如何存储该非结构化内容。这个答案非常简单(尽管我猜我第一次尝试时并没有 100% 正确),请使用 NVARCHAR

尽管存储这种非结构化内容对数据库不友好,但它有时对网站友好,并且在您描述的情况下是一种常见做法。要记住的是,我们要避免搜索这种非结构化数据。为此,我们可能需要采取相当极端的措施。

许多应用程序将通过创建一个单独的表并从 HTML 中解析文本并将每个单独的单词(连同原始表条目的外键)插入到另一个表中以供稍后搜索来解决这个缓慢的搜索问题.即使您这样做您仍然希望保留原始格式的文本以供显示

我通常会在 第二阶段 进行这种类型的优化,因为该网站无需此类优化也能正常运行;它只会变慢,而且在网站有足够的内容可供搜索之前甚至不会被注意到。

另一件需要注意的事情是,这通常不是 HTML 格式的文本。有几种常用的格式,例如 BBCode 或 Markdown。不过,SQL 并不关心,对于您的 SQL 服务器而言,这只是文本。

关于javascript - 在数据库中存储格式化内容的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22230990/

相关文章:

javascript - 获取消息 : 'THIS' is undefined with simple box checking

javascript - 原生 HTML5 拖放功能在 IE11 中不起作用

html - 如何将 MaterializeCSS fixed-action-btn Toolbar 变成一个工具栏?

c# - 使用 ISNULL 的 SQL 查询

sql-server - SQLCMD - 尝试删除字母数字名称为 '14Data' 的数据库会出现语法错误

javascript - HTML 中包含的 JS 文件的 Ruby on Rails 副本

javascript - 使用 JavaScript 清除文本选择

php - 无法将日期选择器日期插入mysql

html - 将屏幕分成 4 个矩形,高度为 50%,宽度为 50%

mysql - 将两个不同的查询结果添加到一张表中