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

StackOverflow https://stackoverflow.com/questions/95459

  •  01-07-2019
  •  | 
  •  

wikis/stackoverflow/等做什么。当涉及到存储文本时怎么办?文本在换行符处是否中断?它被分成固定长度的块吗?如何最好地存储任意长的文本块?

有帮助吗?

解决方案

nvarchar(最大)ftw。因为把简单的事情复杂化是不好的,嗯?

其他提示

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

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

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

关于 PostgreSQL - 使用类型 文本 或者 字节茶. 。如果您需要读取随机块,您可以考虑 大物体.

如果您需要担心在文本中保留诸如格式字符串、引号和其他“粗俗”之类的内容(就像代码可能会有的那样),那么需要首先完全转义特殊字符 - 否则在提交数据库时,它们可能最终会出现导致发出无效命令。

大多数脚本语言都具有内置的工具来执行此操作。

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

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

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

关于存储在数据库或文件中的文本的格式,它可能非常接近输入。如果它是 HTML,那么您只需将它推入一个能够正确转义它的函数即可。

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

对于 SQL Server:

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

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

我怀疑 StackOverflow 正在以 Markdown 格式将文本存储在任意大小的“文本”列中。也许是 UTF8(但也可能是 UTF16 之类的。我猜是 SQL Server,我对此不太了解)。

作为一般规则,您希望以尽可能“原始”的形式将内容存储在数据库中。也就是说,进行所有解码,并可能进行清理,但不要对其执行任何其他操作(例如,如果它是 Markdown,请不要将其编码为 HTML,而将其保留为原始的“原始”格式)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top