【问题标题】:What happens with an image file, when I store it in a database?当我将图像文件存储在数据库中时,会发生什么情况?
【发布时间】:2014-06-19 05:38:06
【问题描述】:

浏览了互联网上许多关于如何在数据库中存储图像的文章。但不幸的是,他们都没有解释数据本身存储在数据库中时究竟发生了什么。

大多数文章显示数据存储在二进制、图像或 blob 数据类型字段中,并且只是在这里检查应用程序,而不是二进制信息,我有一个似乎是内存地址的东西,例如 0x123445323403923。 .. 等等。

1.是存放实际二进制数据的地址吗?

2.如果是这样,当从数据库中检索到这个二进制文件时,它是如何“重新编译”成 TIF 或 JPEG 的?

所以我想知道是否有人可以就上述意义上的情况提供解释。

提前感谢您的回答和信息。

最好的问候

【问题讨论】:

    标签: image binary blob sqldatatypes


    【解决方案1】:

    这个问题有点笼统,但总的来说:

    数据库存储和检索数据,因此通常不了解复杂类型(图像、声音、动画、电子原理图等),它处理二进制数据(1 和 0)。

    为方便起见,大多数数据库提供字符串类型和日期类型,有时还提供一些其他类型,但您可以在数据库中存储您想要的任何内容,因为数据库只是您数据的储物柜。由于数据库不知道/关心图像在字节序列之外是什么,因此它将存储并检索它,然后由您将这些字节解释为图像。

    由于数据库不理解复杂的二进制类型,因此有一个包罗万象的字段类型称为 BLOB(二进制长对象),您可以在其中存储和检索二进制数据。

    在伪代码中:

    database.store(myImage.GetBytes());
    

    然后

    Image myimage  = new Image (database.retrieve(...);
    

    请注意,从图像到字节的转换是代码的一部分,而不是数据库的一部分。数据库只需要 BLOB 字段的字节数。

    【讨论】:

      【解决方案2】:

      您在数据库中看到的不是内存地址,而是十六进制表示的实际字节,如 0x 前缀所示。与任何其他文件一样,图像文件是字节的集合。当它被保存为二进制时,它是保存的普通(或原始)字节。表示原始字节的常用方法是使用十六进制表示。在十六进制中,每个字节由字符集0123456789abcdef0123456789ABCDEF 中的两个字符表示。如果您使用像 HxD 这样的十六进制文件查看器查看图像文件,您应该会看到与数据库中以 0x 开头的值相同的值。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-14
        • 2011-08-28
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 2015-06-17
        • 2021-05-02
        • 2015-12-04
        相关资源
        最近更新 更多