【问题标题】:Which data type do I use in T-SQL if the field can be very small or very large?如果字段可以非常小或非常大,我在 T-SQL 中使用哪种数据类型?
【发布时间】:2012-08-22 00:53:36
【问题描述】:

假设我在表格中有一个列,它可能包含短至单个字符 'a' 或大至转换为 jpg、png、mp3 等的巨大二进制块的信息。

我应该为此使用哪种数据类型?

我以为是varbinary(max)varchar(max),但如果我只存储一个字符或一个短字符串,它会占用未使用的空间吗?

当字段的数据类型可能具有可变长度时,如何存储数据?

根据这个 qa,https://dba.stackexchange.com/questions/1767/how-do-too-long-fields-varchar-nvarchar-impact-performance-and-disk-usage-ms,应该没关系,除了这个:

内存

If the client application allocates memory using the maximum size, the application would allocate significantly more memory than is necessary. Special considerations would have to be done to avoid this.

我怎么知道这个?对不起,如果我是愚蠢的,但它似乎太模糊了。

【问题讨论】:

  • 最小化存储空间有多重要?您对您的数据了解多少,例如,有多少行的数据长度小于 8 字节?有多少超过 1GB?您如何知道数据是 Unicode 格式的 MP3、MP4 还是十四行诗?
  • 我有一个名为“data_type”的字段,它存储有关类型的信息。可能没有字段会超过 10MB。但大多数会存储大约 10~50 个字符。
  • ASCII(8 位)或 Unicode(16 位)字符?
  • 您真的必须将其存储在数据库中吗?我宁愿将它们存储为具有唯一的生成文件名的二进制文件,而只有原始名称(用于 ref)和生成的名称只会进入数据库。并且生成的名称总是可以固定长度。
  • 使用外部文件会带来各种数据损坏的可能性。数据库的备份/恢复不会与文件同步。这些文件可能会在没有相应的数据库更新的情况下被更改或删除。用户可能有权访问数据库提供的安全性之外的文件。也就是说,我已经为涉及索引大量法律文件的项目做到了这一点。在这种情况下,数据库用作索引和日志,但现有文档从未更新。

标签: sql-server database tsql types


【解决方案1】:

如果我是你,我会做的是使用 File-Stream 启用数据库。

您可以在这里了解更多信息:

http://technet.microsoft.com/en-us/library/bb933993(v=sql.105).aspx

网上也有很多信息,所以你在使用时应该不会遇到任何问题。

通常,您将拥有一个包含许多列的表,其中一个列将以二进制格式或 BLOB(二进制大对象)存储信息。好消息是它可以存储的信息仅取决于您的硬盘驱动器空间,因为它存储在您的驱动器中。在其他列中,您可以有一个类型字段 - 用于 eaxmaple mp3/gpef/avi/etc,这将帮助您的应用程序将此 BLOB 转换为其原始类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多