VARCHAR(8)和VARCHAR(32)的使用是否占用数据库中的相同空间?

时间:2017-08-24 11:25:10

标签: php mysql database

我创建了一个网站,其中文件的名称将存储为MD5哈希。

如果我没错,那么在 2 ^ 128 次之后必然会发生碰撞,忽略重复。我在这里找到了thread,我对碰撞的可能性感到满意。几乎是0。

但是,我认为不是使用32(+1)字节,而是将数据库表中的列声明为VARCHAR(32),我可以使用8(+1)字节作为名称节省空间。碰撞概率 1/2 ^ 32 ,忽略了重复。

为了测试这一点,我将列更改为VARCHAR(8),保留所有记录相同,大约260个条目,并检查数据库大小,但DB的大小没有变化。

我使用的公式是:

$temp = mysql_query("SHOW TABLE STATUS");  
$size = 0;
while($row = mysql_fetch_array($temp)) {  
     $size += $row["Data_length"] + $row["Index_length"];  
}

得到here的帮助。

即使我在其他表中尝试使用FOREIGN KEY引用,其中使用了文件名,但其大小与我复制完整文件名的表的大小相同。

现在我的问题是我哪里出错了?是在计算DB大小还是在确定列的数据类型的大小?

我不是来自计算机背景,这是我第一次创建一个网站,所以有些点可能听起来很傻。对不起。

0 个答案:

没有答案