在SQL中存储任意(可能标记)文本的规范方法是什么?

时间:2008-09-18 18:38:14

标签: sql text

wiki / stackoverflow /等是什么。在存储文本方面做什么?文字是否在换行符处被打破?它被分成固定长度的块吗?你如何最好地存储任意长的文本块?

8 个答案:

答案 0 :(得分:9)

nvarchar(max)ftw。因为过于复杂的简单事情很糟糕,mmkay?

答案 1 :(得分:2)

我想如果您需要提供存储大量文本的功能,并且您不介意在查询时无法过多地查看其内容,则可以使用CLobs。

答案 2 :(得分:1)

这完全取决于您使用的RDBMS以及您要存储的文本类型。如果文本被格式化为相当大的数据块,这些数据本身就意味着某些内容,比如标题/正文,那么您可能希望将数据分解为这些类型的列。根据您正在处理的内容,可能需要多个表才能使用此方法。

我不知道其他RDBMS如何处理它,但我知道在每个表中有多个开放式列(text或varchar(max))并不是一个好主意。因此,您需要确保只有一列具有不受限制的字符。

答案 3 :(得分:1)

关于PostgreSQL - 使用类型TEXTBYTEA。如果您需要阅读随机数据块,可以考虑large objects

答案 4 :(得分:0)

如果你需要担心文本中的格式化字符串,引号和其他“cruft”之类的东西,就像代码可能会有的那样,那么特殊字符需要先被完全转义 - 否则在提交数据库时,他们会可能最终会导致发出无效命令。

大多数脚本语言都有本地内置的工具。

答案 5 :(得分:0)

我怀疑StackOverflow正在以任意大小的“text”列中的markdown格式存储文本。也许作为UTF8(但它可能是UTF16或其他东西。我猜它是SQL Server,我不太了解它。)

作为一般规则,您希望以“最新”的形式将内容存储在数据库中。也就是说,做你所有的解码,也可能是清理,但不要做任何其他事情(例如,如果它是Markdown,不要将它编码为HTML,保留原始的'原始'格式)

答案 6 :(得分:0)

我想这取决于你想要存储文本的位置,如果你需要交易等等。

像SQL Server这样的数据库有一种可以存储长文本字段的类型。在SQL Server 2005中,对于长unicode文本字符串,这主要是nvarchar(max)。通过使用数据库,您可以从事务和简单的备份/恢复中受益,假设您将数据库用于StackOverflow.com等其他事项。

另一种方法是将文本存储在磁盘上的文件中。这可能相当简单,并且可以在数据库不可用或过度使用的环境中工作。

考虑到存储在数据库或文件中的文本格式,它可能非常接近输入。如果它是HTML,那么你只需要通过一个能够正确地逃避它的函数。

要记住的是,您可能希望从创建到存储使用unicode或UTF-8,反之亦然。这将允许您支持其他语言。此编码机制的任何问题都将破坏您的文本。从历史上看,人们可能会基于他们节省磁盘空间等的假设默认使用ASCII。

答案 7 :(得分:0)

对于SQL Server:

使用varchar(max)存储。我认为上限是2 GB。

不要试图自己逃避文本。将文本传递给参数化结构,该结构将为您正确执行转义。在.Net中你可以为SqlCommand添加一个参数,或者只使用LinqToSQL(然后为你管理SqlCommand)。