用show table status后,在php中如何计算一个表的大小? 晕,没有人摆我,大家发表意见,知道一点和我说一点也可以呵,互相学习呵!是不是我没有表达清楚,就是:如何计算出mysql中数据库的一个表占用多少K 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是所有的字段都可以计算大小的比如 varchar 类型定义宽度为100,存放了一个串"abcd"。那么他只占5个字节。只有那些定长的字段类型无论是否有值都占有固定的空间 Data_length + Index_length 就是了 platinum(白金):是这样计算吗?确定吗?我用mysql_font与相加的数库有出入呵? 我用mysql_front看到的表的字节数与这样Data_length + Index_length 计算出来的字节数有出入,所以我想找到精确一点的答案.谢谢 由于字段可以是不定长的,所以记录也是不定长的。如果按字段定义宽度求和,应该是大于实际使用空间的。还有text、bclob字段你如何计算呢?一张表为3个文件,表结构、表数据和索引。我认为不好估算 不是吧~~这么快就下了结论,我可认为这是一个简单的问题呵~~~等待ing... 可以参考下phpmyadmin呀,它有算的 feyge(菲戈..尘缘如梦,几番起伏终不平) :在phpmyadmin里面没有找到呵 你的版本是多少啊?我的是2.2.6(最新的好像是2.4.0吧,我下了一个粗粗用了一下,感觉变化不大,只是更方便操作了)举一小例: 資料表 執行 記錄 型態 大小 admin_login 瀏覽 選擇 新增 屬性 刪除 清空 2 MyISAM 2.1 KB 那个大小就是数据表的大小了。 Table Action Records Type Size admin_login Browse Select Insert Properties Drop Empty 2 MyISAM 2.1 KB 几大高手都来了,关注,不能解决,只能帮助顶了!up,up! 谢谢,今天看了phpmyadmin4.0的计算,大体看了一下,抠出来大家一起看一下<?php//取得表的大小,测试文件,从phpmyadmin2.4.0截出来的,不知对不对,请大家指正,还没有明白foreach里面的if,elseif是做什么用的//conncet to the database server$cnn = "localhost";$username = ""; //用户名$password = ""; //密码$db = ""; //数据库名$dbcnx=@mysql_connect("$cnn","$username","$password");//selcet the database"yjj"$sel=mysql_select_db($db);$dbname="yjj";$result = mysql_query("SHOW TABLE STATUS FROM $db");//sql语句执行$data[$key] = array();while ($row=mysql_fetch_array($result)) { $data[] = $row;}$formated_size = array();$unit = array();foreach ($data as $key => $value) { $temp = $value['Name']; if (isset($value['Type']) && ereg('^(MyISAM|ISAM|HEAP)$', $value['Type'])) { $tblsize = doubleval($value['Data_length']) + doubleval($value['Index_length']); list($formated_size[$temp], $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0); } else if (isset($data[$key]['Type']) && $data[$key]['Type'] == 'InnoDB') { $tblsize = $value['Data_length'] + $value['Index_length']; list($formated_size[$temp], $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0); } else if (isset($value['Type']) && ereg('^(MRG_MyISAM|BerkeleyDB)$', $value['Type'])) { $formated_size[$temp] = ' - '; } else { $formated_size[$temp] = 'unknown'; }}print"<pre>";print_r($formated_size);print"</pre>";/*** Formats $value to byte view** @param double the value to format* @param integer the sensitiveness* @param integer the number of decimals to retain** @return array the formatted value and its unit** @access public** @author staybyte* @version 1.2 - 18 July 2002*/function PMA_formatByteDown($value, $limes = 6, $comma = 0){ $byteUnits = Array( '0' => 'Bytes', '1' => 'KB', '2' => 'MB', '3' => 'GB', '4' => 'TB', '5' => 'PB', '6' => 'EB'); $dh = pow(10, $comma); $li = pow(10, $limes); $return_value = $value; $unit = $GLOBALS['byteUnits'][0]; for ( $d = 6, $ex = 15; $d >= 1; $d--, $ex-=3 ) { if (isset($byteUnits[$d]) && $value >= $li * pow(10, $ex)) { $value = round($value / ( pow(1024, $d) / $dh) ) /$dh; $unit = $byteUnits[$d]; break 1; } // end if } // end for if ($unit != $byteUnits[$d][0]) { $return_value = number_format($value, $comma, ",", "."); } else { $return_value = number_format($value, 0, ",", "."); } return array($return_value, $unit);} // end of the 'PMA_formatByteDown' function 字符编码的问题~~异步请求的时候出错 关与跨域请求 php header实现下载 下载时页面上的其它链接不能打开 必须先下载完或停止下载 工作两年了,php程序员,可是工资一直都不高 我最近做了一个网站,请高手指点一下网址供上! 新手请教APACHE为什么整个目录的文件都显示出来了? 小妹先祝大家圣诞快乐,有空看看我的问题啦:上传文件问题, 怎样把用户注册的账号和密码保存到一个文件中? 一个提交报单时候保持格式的问题 printf函数的困惑! 如何将同一数据表内几条相同用户名的数据删除只剩下一条? 高手看过来,php下运行linux命令的问题
比如 varchar 类型定义宽度为100,存放了一个串"abcd"。那么他只占5个字节。
只有那些定长的字段类型无论是否有值都占有固定的空间
如果按字段定义宽度求和,应该是大于实际使用空间的。还有text、bclob字段你如何计算呢?
一张表为3个文件,表结构、表数据和索引。
我认为不好估算
等待ing...
資料表 執行 記錄 型態 大小
admin_login 瀏覽 選擇 新增 屬性 刪除 清空 2 MyISAM 2.1 KB
那个大小就是数据表的大小了。
admin_login Browse Select Insert Properties Drop Empty 2 MyISAM 2.1 KB
up,up!
<?php
//取得表的大小,测试文件,从phpmyadmin2.4.0截出来的,不知对不对,请大家指正,还没有明白foreach里面的if,elseif是做什么用的
//conncet to the database server
$cnn = "localhost";
$username = ""; //用户名
$password = ""; //密码
$db = ""; //数据库名
$dbcnx=@mysql_connect("$cnn","$username","$password");
//selcet the database"yjj"
$sel=mysql_select_db($db);
$dbname="yjj";
$result = mysql_query("SHOW TABLE STATUS FROM $db");//sql语句执行
$data[$key] = array();
while ($row=mysql_fetch_array($result)) {
$data[] = $row;
}
$formated_size = array();
$unit = array();
foreach ($data as $key => $value) {
$temp = $value['Name'];
if (isset($value['Type']) && ereg('^(MyISAM|ISAM|HEAP)$', $value['Type'])) {
$tblsize = doubleval($value['Data_length']) + doubleval($value['Index_length']);
list($formated_size[$temp], $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0);
} else if (isset($data[$key]['Type']) && $data[$key]['Type'] == 'InnoDB') {
$tblsize = $value['Data_length'] + $value['Index_length'];
list($formated_size[$temp], $unit) = PMA_formatByteDown($tblsize, 3, ($tblsize > 0) ? 1 : 0);
} else if (isset($value['Type']) && ereg('^(MRG_MyISAM|BerkeleyDB)$', $value['Type'])) {
$formated_size[$temp] = ' - ';
} else {
$formated_size[$temp] = 'unknown';
}
}
print"<pre>";
print_r($formated_size);
print"</pre>";
/**
* Formats $value to byte view
*
* @param double the value to format
* @param integer the sensitiveness
* @param integer the number of decimals to retain
*
* @return array the formatted value and its unit
*
* @access public
*
* @author staybyte
* @version 1.2 - 18 July 2002
*/
function PMA_formatByteDown($value, $limes = 6, $comma = 0)
{
$byteUnits = Array(
'0' => 'Bytes',
'1' => 'KB',
'2' => 'MB',
'3' => 'GB',
'4' => 'TB',
'5' => 'PB',
'6' => 'EB'); $dh = pow(10, $comma);
$li = pow(10, $limes);
$return_value = $value;
$unit = $GLOBALS['byteUnits'][0]; for ( $d = 6, $ex = 15; $d >= 1; $d--, $ex-=3 ) {
if (isset($byteUnits[$d]) && $value >= $li * pow(10, $ex)) {
$value = round($value / ( pow(1024, $d) / $dh) ) /$dh;
$unit = $byteUnits[$d];
break 1;
} // end if
} // end for if ($unit != $byteUnits[$d][0]) {
$return_value = number_format($value, $comma, ",", ".");
} else {
$return_value = number_format($value, 0, ",", ".");
}
return array($return_value, $unit);
} // end of the 'PMA_formatByteDown' function