zoukankan      html  css  js  c++  java
  • 如何导出数据库的数据词典

      在项目的开发时,为了深入了解项目的数据情况,通常都会使用到数据字典,方便对某个字段进行详细的了解,加快开发的速度以及防止不必要的错误发生,下面介绍下数据字典的生成。

    第一,可以使用第三方的工具如sqlyog

    第二,就是自己进行编写一些代码进行导出,下面是一些PHP代码,连接数据库对某个数据库的数据词典导出

    <?php 
    header('content-type:text/html;charset=utf-8'); 
    define('DB_HOST','localhost'); 
    define('DB_USER','root'); 
    define('DB_PASS','pwd'); 
    define('DB_NAME','dbname'); 
    define('DB_PORT',3306); 
    define('DB_CHAR','utf8'); 
    define('APPNAME',''); 
    $conn=mysql_connect(DB_HOST.':'.DB_PORT,DB_USER,DB_PASS); 
    mysql_select_db(DB_NAME); 
    mysql_query('set names ' . DB_CHAR); 
    $sql="SHOW TABLE STATUS FROM " . DB_NAME; 
    $result=mysql_query($sql); 
    $array=array(); 
    while($rows=mysql_fetch_assoc($result)){ 
    $array[]=$rows; 
    } 
    // table count 
    $tab_count = count($array); 
    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="zh"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>'.APPNAME.'--数据字典</title> 
    <style type="text/css"> 
        table caption, table th, table td { 
            padding: 0.1em 0.5em 0.1em 0.5em; 
            margin: 0.1em; 
            vertical-align: top; 
        } 
        th { 
            font-weight: bold; 
            color: black; 
            background: #D3DCE3; 
        } 
        table tr.odd th, .odd { 
            background: #E5E5E5; 
        } 
        table tr.even th, .even { 
            background: #f3f3f3; 
        } 
        .db_table{ 
            border-top:1px solid #333; 
        } 
        .title{font-weight:bold;} 
    </style> 
    </head> 
    <body> 
    <div style="text-align:center;background:#D3DCE3;font-size:19px;"> 
        <b>'.APPNAME.'--数据字典</b> 
    </div> 
    <div style="background:#f3f3f3;text-align:center;">(注:共'.$tab_count.'张表,按ctrl+F查找关键字)</div>'."
    "; 
    for($i=0;$i<$tab_count;$i++){ 
    echo '<ul type="square">'."
    "; 
    echo '  <li class="title">'; 
    echo ($i+1).'、表名:[' . $array[$i]['Name'] . ']      注释:' . $array[$i]['Comment']; 
    echo '</li>'."
    "; 
    //查询数据库字段信息 
    $tab_name = $array[$i]['Name']; 
    $sql_tab='show full fields from `' . $array[$i]['Name'].'`'; 
    $tab_result=mysql_query($sql_tab); 
    $tab_array=array(); 
       
    while($r=mysql_fetch_assoc($tab_result)){ 
        $tab_array[]=$r; 
    } 
    //show keys 
    $keys_result=mysql_query("show keys from `".$array[$i]['Name'].'`',$conn); 
    $arr_keys=mysql_fetch_array($keys_result); 
        echo '<li style="list-style: none outside none;"><table border="0" class="db_table" >'; 
        echo '<tr class="head"> 
            <th style="110px">字段</th> 
            <th>类型</th> 
            <th>为空</th> 
            <th>额外</th> 
            <th>默认</th> 
            <th style="95px">整理</th> 
            <th>备注</th></tr>'; 
        for($j=0;$j<count($tab_array);$j++){ 
            $key_name=$arr_keys['Key_name']; 
            if($key_name="PRIMARY"){ 
                $key_name='主键('.$key_name.')'; 
            } 
            $key_field=$arr_keys['Column_name']; 
            if ( $tab_array[$j]['Field']==$key_field){ 
                $key_value="PK"; 
            }else{ 
                $key_value=""; 
            } 
            echo '        <tr class="'.($j%2==0?"odd":"even").'">'."
    "; 
            echo '          <td>' . $tab_array[$j]['Field'] . '</td>'."
    "; 
            echo '          <td>' . $tab_array[$j]['Type'] . '</td>'."
    "; 
            echo '          <td>' . ($key_value!=''?$key_value:$tab_array[$j]['Null']) . '</td>'."
    "; 
            echo '          <td>' . $tab_array[$j]['Extra'] . '</td>'."
    "; 
            echo '          <td>' . $tab_array[$j]['Default'] . '</td>'."
    "; 
            echo '          <td>' . $tab_array[$j]['Collation'] . '</td>'."
    "; 
            echo '          <td>' . ($key_value!=''?$key_name:$tab_array[$j]['Comment']) . '</td>'."
    "; 
            echo '        </tr>'."
    "; 
        } 
        echo '  </table></li>'."
    "; 
        echo '</ul>'."
    "; 
       
    } 
    echo '</body>'."
    "; 
    echo '</html>'."
    ";  
    

     注意:如果遇到乱码的问题,有四种可能:

    第一、创建数据库时是否是utf8;

    第二、创建数据表时编码是否是utf8;

    第三、meta标签里面的设置

       
       
  • 相关阅读:
    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    11
    实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题
    tx2系统备份与恢复
    如何在Ubuntu 18.04上安装和卸载TeamViewer
    bzoj 3732 Network (kruskal重构树)
    bzoj2152 聪聪可可 (树形dp)
    牛客 216D 消消乐 (二分图最小点覆盖)
    牛客 197E 01串
    Wannafly挑战赛23
  • 原文地址:https://www.cnblogs.com/gyrgyr/p/6062913.html
Copyright © 2011-2022 走看看