我需要将用户上传的文件存储到数据库中(文件系统不是一个选项)。
上传的文件是不同类型的(例如PDF,EXCEL等)。
我在决定是否使用MEDIUMBLOB
作为二进制数据存储这些文件类型时遇到了问题。
混淆出现的原因是这些文件的大小差异很大。有些文件只有几百KB(例如114 KB),而其他一些文件则高达1.5 MB。
所以我确实需要使用MEDIUMBLOB
作为列类型。但是我有点困惑,因为实际上占用的内存取决于上传文件本身的大小,还是忽略文件大小,仅基于数据类型分配内存。这非常重要,因为每天上传的大多数文件(其中很多)实际上都非常小,磁盘中可用的内存(空间)有限。
根据MySQL文档中的以下部分:
10.5. Data Type Storage Requirements
L表示给定字符串值的实际长度(以字节为单位)。
Data type Storage Required
========================================================
TINYBLOB, TINYTEXT L + 1 bytes, where L < 2 ^ 8
BLOB, TEXT L + 2 bytes, where L < 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2 ^ 24
LONGBLOB, LONGTEXT L + 4 bytes, where L < 2 ^ 32
我认为使用的内存取决于实际上传的文件大小。例如,如果我将列类型设置为MEDIUMBLOB
,并上传一个大小为114 KB的文件,则只使用114 KBytes + 3 Bytes
磁盘内存而不是(2^24) Bytes + 3 Bytes
。我想得对吗?或者,通过在
MEDIUMBLOB
字段中存储许多大小介于100到300 KB之间的文件会浪费大量磁盘内存吗?