哪种SQL数据类型可以存储Base64编码的文件?

61

nvarchar(max),varchar(max),还是真的要解码字符串并将其放入图像或 blob 中?

更长的版本:(包含所有有趣的细节)

我有一个 .Net SOAP Web 服务,可以将记录保存在 SQL 2008 DB 中。该服务将被扩展以接受图像,这些图像(不管好坏)也需要暂时放入数据库中。

为了保持简单,该服务将图像作为 Base64 编码的字符串接收,并稍后必须作为 Base64 编码的字符串返回(同一服务的不同方法)。

最初,我只想使用 nvarchar(max),我相信这样做是可行的。但是后来我想到,base64 编码意味着它可以使用 varchar(max),并且使用更少的存储空间。这是正确的吗?还是我应该果断地将文本解码为二进制,将其作为 blob 存储,然后再次重新编码?

最后 - 加载存储和性能不太可能引起问题,这是一个个人项目,负载很低。

编辑:回答 @howiecamp 的问题,我在此处写出了如何对图像进行 URL 编码:http://www.flowerchild.org.uk/archive/2010/06/13/base-64-encoding-an-image-to-pass-across-a-web.html


你能分享一下对文档进行 Base64 编码以便存储,然后再进行反转的代码吗? - Howiecamp
1个回答

109

Base64其实是一种ASCII编码,因此不需要使用NVARCHAR,并且由于它是文本,我建议使用VARCHAR(MAX)

这是纯文本,最多可达2 GB(应该足够了),并且它是字符串类型,因此您可以在其上使用所有字符串函数。在这种情况下,NVARCHAR确实会使用两倍的存储空间-每个字符始终是2个字节-且完全是不必要的。


Varchar(max)就是一个不错的折中方案,既易于实现,又不会浪费存储空间。谢谢 :) - Andrew M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接