将Excel数据导入MySQL数据库是一项常见的任务,但实际操作中可能会遇到许多问题。以下方法经过实践验证,是最可靠的方式之一,值得记录和分享。

一、首先登录到phpMyAdmin数据库管理工具,导出一个空表作为模板。
确保表的格式为CSV,并使用记事本打开该文件。注意统一编码格式:如果数据库采用的是UTF-8编码,那么请将CSV文件也转换为UTF-8编码,否则中文字符可能无法正常导入。

二、在Excel中调整数据列顺序,使其与数据库中的字段顺序一致。这一步可以简化后续操作流程。

三、确保Excel中的列数与MySQL表中的字段数量完全匹配。如果某些字段为空值,可以选择两种方式处理:
方法一:删除MySQL中这些原本为空值的字段,完成数据导入后再重新创建它们。
方法二:在Excel中插入相应列并赋予默认值(注意不能直接赋为空值,否则可能导致CSV文件中出现大段空白,进而引发“CSV 输入的第 1 行字段数有错”的错误提示)。

四、完成Excel表格调整后,将需要导入的数据行复制到之前建立好的CSV文件中。
建议将字段间的分隔符从默认的特殊空格批量替换为英文逗号,最后保存文件。

五、进入MySQL界面,定位到目标表,点击“导入”按钮选择刚才准备好的CSV文件。
记得设置字段分隔符为逗号,然后按照提示完成导入过程。

六、最后别忘了根据实际情况重新添加那些先前删除过的字段。

==================================================================

以上步骤以Dedecms CMS为例进行了详细说明。对于此类系统,除了基本数据外,还需要同步更新文章主表(archives)及精简表(arctiny)。具体实现方法如下:

为了更新精简表,可以在include\\extend.func.PHP文件中定义一个函数:


function addon_to_arctiny(){
    global $dsql;
    for ($x=5; $x<470; $x++) {
        $row2 = $dsql->GetOne("SELECT jiancheng FROM `dede_addon18` where aid='$x'");
        $row3=$row2['jiancheng'];
        $query = "INSERT INTO `dede_arctiny` (id,typeid,typeid2,channel,arcrank,sortrank,senddate,mid) Values('$x',2,0,18,0,1455680144,1455671192,1)";
        $dsql->ExecuteNoneQuery($query);
    }
}

随后,在模板中调用此函数即可:


{dede:global.cfg_webname runphp='yes' function="addon_to_arctiny()"/}

对于主表的插入操作,同样可以参考上述逻辑进行扩展:


function addon_to_archives(){
    global $dsql;
    for ($x=5; $x<470; $x++) {
        $row2 = $dsql->GetOne("SELECT jiancheng FROM `dede_addon18` where aid='$x'");
        $row3=$row2['jiancheng'];
        $query = "INSERT INTO `dede_archives` (id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,source,litpic,pubdate,senddate,mid,keywords,lastpost,scores,goodpost,badpost,voteid,notpost,description,filename,dutyadmin,tackid,mtype,weight) 
        Values('$x','2','0',1455670875,'',1,18,0,0,0,'$row3','','','','admin','none','',1455670875,1455670875,1,'',0,0,0,0,0,0,'','$x',1,0,0,'$x')";
        $dsql->ExecuteNoneQuery($query);
    }
}

通过这种方法,可以有效保证数据的一致性和完整性。