为什么压缩的Blob值不会更改sqlite数据库的大小?

Nik*_*iko 1 php compression sqlite blob

我有一个.sqlite 数据库

$db = new PDO("sqlite:db.sqlite");
Run Code Online (Sandbox Code Playgroud)

它的大小是60MB。它有1张桌子。该表列中的一列(唯一的重列)保存BLOB_TEXT数据。我正在尝试压缩此列值

$pdo = $db->query("SELECT id, house_plan FROM houses");
$houses = $pdo->fetchAll(PDO::FETCH_ASSOC);
$initial_length = 0;
$compressed_length= 0;

for ($i = 0; $i < count($houses); $i++) {
  $id = $houses[$i]["id"];
  $house_plan = $houses[$i]["house_plan"];
  $compressed = gzcompress($house_plan);

  $initial_length += strlen($house_plan);
  $compressed_length += strlen($compressed);
  flush();

  $query = $db->prepare("UPDATE houses SET house_plan=? WHERE id=" . $id);
  $query->bindParam(1, $compressed, PDO::PARAM_LOB);
  $query->execute();
}
Run Code Online (Sandbox Code Playgroud)

然后打印汇总的初始BLOB_TEXT数据长度和压缩数据长度(替换了表中的初始数据):

echo "Before: " . $initial_length . ", After: " . $compressed_length;
// Before: 52222553, After: 2577948
Run Code Online (Sandbox Code Playgroud)

他们在%中的差异:

echo "Difference: " . (100 - round($compressed_length / $initial_length * 100)) . "%";
// Difference: 95%
Run Code Online (Sandbox Code Playgroud)

之后,我检查数据库的大小,它仍然是60MBBLOB_TEXT数据差异为95%,但数据库的大小未更改

怎么可能呢?还是我在做错误的压缩BLOB_TEXT
我希望数据库的大小也会减少,因为这是我仅有的重列。

CL.*_*CL. 5

压缩之前,数据库已将数据填充到大约100%。压缩后,它包含大约5%的数据和大约95%的可用空间。

通常,避免减小文件大小是个好主意,因为无论如何以后可用空间都会被新数据填充。如果要重新打包数据库,请运行VACUUM