2014-03-06 59 views
3

我有一个应用程序,涉及使用所见即所得的HTML编辑器存储和检索大量用户格式的内容。有点像是如何保存格式化的问题和答案。在数据库中存储格式化内容的标准方式是什么?

这样做的标准方法是什么?

编辑:

只是为了澄清:我不是问有关数据类型在数据库中存储。相反,我关心的是在数据库中存储带有样式信息的html标签块。

+0

之所以没有其他人发帖是因为最好的答案已经给出(并在随后冗长详细阐述)。如果你不相信我去看看SourceForge的所有PHP项目。如果它们接受格式化输入,则它们使用VARCHAR或TEXT字段(或NVARCHAR,NTEXT),并且没有关于实际存储方式的特殊内容。如果你需要更多关于这个过程的信息,那么我们需要更多的解释你的问题。 – krowe

回答

2

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

更新: 是的,如果你想支持Unicode(你可能在这种情况下做),那么做一个NVARCHAR

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

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

这是真的,不好,所以我们应该尽量避免这样做。如果您可以避免允许用户输入自由形式的文本,那么一定要这样做。从这一点开始,您可以快速,一致地将HTML格式应用于客户端应用程序中的数据。

但是,这个问题的基础是,你想要一个非结构化内容的领域,你问如何存储非结构化内容。答案非常简单(即使我猜我第一次尝试没有100%正确),请使用NVARCHAR

即使存储这些非结构化内容不是数据库友好的,它有时也是网站友好的,并且在您描述的情况下是常见做法。需要记住的是我们希望避免搜索这些非结构化数据。我们可能需要采取相当极端的措施才能这样做。

许多应用程序将通过创建一个单独的表并将文本解析出HTML并将每个单词(以及原始表条目的外键)插入到要搜索的其他表中来解决此缓慢搜索问题后来。即使你这样做你仍然想保留原来的格式文本用于显示目的

我通常会进行此类优化Phase II,因为该网站将在没有这种优化的情况下运行;它会变得更慢,并且在网站有大量内容需要搜索之前甚至不会被注意到。

另外需要注意的是,通常这不会是HTML格式的文本。有几种常用的格式,如BBCode或Markdown。 SQL并不在乎,对于你的SQL服务器来说,这些都只是文本。

+0

'VARCHAR'通常不是最好的,因为我们不知道这些字符是否包含unicode。 – EkoostikMartin

0

问题的标题可以存储在VARCHAR中,问题存储在TEXT中。

这里,看看数据类型的SQL Server:http://msdn.microsoft.com/en-us/library/ms187752.aspx

+0

不要将w3schools用作SQL Server上的参考,请转到您的特定版本的正确MSDN页面以查看有效的数据类型。 – EkoostikMartin

+0

@EkoostikMartin对不起,我已删除链接。 –

相关问题