晕,没有人摆我,大家发表意见,知道一点和我说一点也可以呵,互相学习呵!
是不是我没有表达清楚,
就是:如何计算出mysql中数据库的一个表占用多少K

解决方案 »

  1.   

    不是所有的字段都可以计算大小的
    比如 varchar 类型定义宽度为100,存放了一个串"abcd"。那么他只占5个字节。
    只有那些定长的字段类型无论是否有值都占有固定的空间
      

  2.   

    Data_length + Index_length 就是了
      

  3.   

    platinum(白金):是这样计算吗?确定吗?我用mysql_font与相加的数库有出入呵?
      

  4.   

    我用mysql_front看到的表的字节数与这样Data_length + Index_length 计算出来的字节数有出入,所以我想找到精确一点的答案.谢谢
      

  5.   

    由于字段可以是不定长的,所以记录也是不定长的。
    如果按字段定义宽度求和,应该是大于实际使用空间的。还有text、bclob字段你如何计算呢?
    一张表为3个文件,表结构、表数据和索引。
    我认为不好估算
      

  6.   

    不是吧~~这么快就下了结论,我可认为这是一个简单的问题呵~~~
    等待ing...
      

  7.   

    可以参考下phpmyadmin呀,它有算的
      

  8.   

    feyge(菲戈..尘缘如梦,几番起伏终不平) :在phpmyadmin里面没有找到呵
      

  9.   

    你的版本是多少啊?我的是2.2.6(最新的好像是2.4.0吧,我下了一个粗粗用了一下,感觉变化不大,只是更方便操作了)举一小例:
     資料表  執行 記錄 型態 大小 
       admin_login    瀏覽  選擇  新增  屬性  刪除  清空  2   MyISAM      2.1 KB 
    那个大小就是数据表的大小了。
      

  10.   

    Table   Action Records Type Size 
       admin_login    Browse  Select  Insert  Properties  Drop  Empty  2   MyISAM      2.1 KB
      

  11.   

    几大高手都来了,关注,不能解决,只能帮助顶了!
    up,up!
      

  12.   

    谢谢,今天看了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] =  '&nbsp;-&nbsp;';
    } 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