【发布时间】:2008-09-26 16:28:22
【问题描述】:
在 SQL Server 的表中存储大量文本的最佳方法是什么?
varchar(max) 可靠吗?
【问题讨论】:
标签: sql-server
在 SQL Server 的表中存储大量文本的最佳方法是什么?
varchar(max) 可靠吗?
【问题讨论】:
标签: sql-server
在 SQL 2005 及更高版本中,VARCHAR(MAX) 确实是首选方法。 TEXT 类型仍然可用,但主要是为了向后兼容 SQL 2000 及更低版本。
【讨论】:
我喜欢使用 VARCHAR(MAX)(或者实际上是 NVARCHAR),因为它的工作方式类似于标准 VARCHAR 字段。既然是介绍,我尽可能使用它而不是 TEXT 字段。
【讨论】:
Varchar(max) 仅在 SQL 2005 或更高版本中可用。这将最多存储 2GB 并且可以被视为常规 varchar。在 SQL 2005 之前,使用“文本”类型。
【讨论】:
根据找到here 的文本,varbinary(max) 是要走的路。您将能够存储大约 2GB 的数据。
【讨论】:
将文本拆分为您的数据库实际可以处理的块。并且,将拆分的文本放在另一个表中。将text_chunk 表中的id 用作原始表中的text_chunk_id。您可能希望表中的另一列保留适合您最大文本数据类型的文本。
CREATE TABLE text_chunk (
id NUMBER,
chunk_sequence NUMBER,
text BIGTEXT)
【讨论】:
在一个 BLOB 中
BLOB 是非常大的可变二进制或字符数据,通常是文档(.txt、.doc)和图片(.jpeg、.gif、.bmp),可以存储在数据库中。在 SQL Server 中,BLOB 可以是 text、ntext 或 image 数据类型,可以使用 text 类型
文字
可变长度的非Unicode数据,存储在服务器的代码页中,最大长度为231 - 1(2,147,483,647)个字符。
【讨论】:
根据您的情况,可以考虑的另一种设计方案是将它们作为 .txt 文件保存到服务器并将文件路径保存到您的数据库。
【讨论】:
使用nvarchar(max) 将整个聊天对话线程存储在一条记录中。通过插入标记在内容文本中识别每个单独的文本消息(或块)。
例子:
{{UserId: Date and time}}<Chat Text>.
显示时 UI 应该足够智能,可以理解这些标记并正确显示。这样,只要未达到大小限制,一条记录就足以进行一次对话。
【讨论】: