在数据库中存储长文本(文章)的最佳方式是什么?它不需要是可搜索的。
我想让人们阅读我书店里每本书的第一章。将其转储到数据库字段中会使使用 css 设置段落样式变得困难..
编辑:访问数据库
如果是 sql server 2005 使用 VARCHAR(MAX)
编辑,
看来他赛义夫访问,
所以我会和备忘录一起去
最多 63,999 个字符。(如果 Memo 字段是通过 DAO 操作的,并且只有文本和数字 [不是二进制数据] 将存储在其中,那么 Memo 字段的大小受数据库大小的限制。)
或 OLE 对象(如果可以)
链接的对象(例如 Microsoft Excel 电子表格、Microsoft Word 文档、图形、声音或其他二进制数据)(OLE/DDE 链接:OLE 对象与其 OLE 服务器之间或动态数据交换(DDE)之间的连接) 源文档和目标文档。) 或嵌入(嵌入:插入来自另一个应用程序的 OLE 对象的副本。对象的源,称为 OLE 服务器,可以是任何支持对象链接和嵌入的应用程序。更改嵌入对象不会反映在原始对象中。)在 Microsoft Access 表中。
高达 1 GB(受可用磁盘空间限制)
我不会将任何文档存储在数据库中,而是将数据存储在文件系统中的文件中,而数据库中唯一的东西就是指向数据文件的指针。
您没有在您的问题中提供任何细节,表明需要将文档存储在数据库本身中。
而且在极少数情况下它是有利的。
我不知道您使用的是哪个数据库,但如果不需要搜索文本,那么您可以简单地存储 HTML 格式的文本(例如,来自 FCKEditor 或类似组件的值)。如果您还需要可搜索性,那么您可以将 HTML 和纯文本存储在两个单独的字段中。
如果您使用 MS SQL Server 2008 或其他数据库上的任何等效数据类型,则字段可以是 nvarchar(MAX)。
编辑:似乎您正在使用 Access,所以选择备忘录数据类型!如果您决定存储 HTML,请考虑仅存储通用标记 (div, p) 来划分文本,然后应用 CSS 格式,将存储的文本包装在另一个 div 中,为子元素指定格式类。
你有几个选择:
将其存储为一个没有格式的长字符串,在屏幕上看起来很平淡。
将其存储为带有嵌入式 html 和 css 的长单个字符串,如果您想让您的网站具有不同的外观/感觉,这将是一个糟糕的选择。
对其进行规范化,以便您有表格来存储书籍、章节、段落等。然后,您可以在将文本加载到应用程序中时对其进行格式化和样式化。
CLOB / TEXT / VARCHAR(MAX)
长文本 ( ) 和长数据 ( )之间的主要区别在于BLOB / IMAGE / VARBINARY(MAX)
,前者需要进行字符集转换,而前者则不需要。
如果需要在数据库端进行字符集转换,使用CLOB
和类似。
如果您总是想在处理数据时检索数据,字节到字节(而不是字符到字符),使用BLOB
和类似的。
以下仅适用于 Jet 4.0,即 Access2000 至 Access2003 时代的 Access 数据库引擎版本:
我不会将任何文档存储在数据库中,而是将数据存储在文件系统中的文件中,而数据库中唯一的东西就是指向数据文件的指针。
您没有在您的问题中提供任何细节,表明需要将文档存储在数据库本身中。
而且在极少数情况下它是有利的。
如果你使用的是ACE,它是Access2007时代的Access Database Engine版本,附件数据类型是一个选项,但是我真的不知道它是如何工作的,我从来没有使用过它,所以我不能推荐它,也不要说它为此目的是好是坏。我还对 Access 数据库引擎主要版本的第一个版本中的新数据类型持谨慎态度。我只记得 Jet 4 引入时字节和十进制字段的所有问题,并且不想承诺可能永远无法正常工作的东西。ACCDB 格式的 Attachment 类型是为了与 Sharepoint 兼容而引入的,而这种外部依赖让我有些犹豫。如果 Sharepoint 改变它的工作方式,ACCEDB 数据类型是否会改变?我不确定我是否愿意冒这个风险。
使用CLOB。
对于 SQL 服务器
TEXT
/NTEXT
对于 SQL Server 2000
VARCHAR(MAX)
/NVARCHAR(MAX)
对于 SQL Server 2005 及更高版本
我建议将第一章存储为 pdf 文件。这是安全的并且允许良好的格式化。然后根据您的产品使用 blob、clob、varchar 或文本字段(请参阅其他答案)。
或者您可以使用图像并查看类似 amazone 的“查看内部”的内容。它可以使用相同的数据库技术。
或者,您可以使用诸如标记之类的东西。
我个人不喜欢将 html 放入我的数据库中。哪怕只是为了输出。太容易放入一些javascript。但也许我太谨慎了。
将其放在 TEXT 字段中,并与它们一起放置,<p>
这样您就可以设置段落样式。
由于它不需要可搜索,因此不会影响您的 sql 性能。