【发布时间】: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