Zblog数据纯手工转换Typecho全过程

春节过后,突然有一天发现自己的博客页面竟然全都打不开了,显示“内容编码错误”,登录主机后又发现部分文件竟然神秘丢失了(备份文件夹被清空了,貌似主机商进行了机房的物理迁移)。几经搜索和试验,我发现原因可能是主机搬迁后“Gzip压缩”功能被关闭了(尽管客服再三肯定此功能是打开的),而我进入phpmyadmin后台将博客“Gzip压缩”选项关闭后,网站可以正常访问,但总感觉比以前的响应要慢很多,不知是不是心理作用。

我手动拷贝到本地的备份文件最近的版本是2019年1月25日,当我将备份文件还原后又发现网站所有的设置和插件设置竟然全都恢复为初始值了,实在懒得再去挨个设置一遍,加之zblog用了这么久也早看腻歪了,于是决定转投typecho阵营。

可是在网上找了好久,也没有发现一种可以将zblog完美转换typecho的工具或方法,有的说可以先将zblog转WordPress、再由WordPress转typecho,但那样实在太折腾了,还不能确定是否能完美转换。几百篇文章,手动复制粘贴的工程量实在太大了,另外评论也没有办法复制。

忽然想到以前重装博客系统的步骤,先安装一个全新的系统,然后将先前备份的sql数据库从phpmyadmin导入进去,于是我想zblog转typecho或许也能从数据库上想想办法。昨天折腾了一下午,还真让我试验成功了,之前所有的zblog数据全部完美转换至typecho,现将转换方法在此做个备忘,有需要的朋友可以参考一下。

1、熟悉一下zblog和typecho的几个数据表。

首先进入phpmyadmin平台,看看zblog和typecho数据表的不同之处。

我们需要转换的数据表有以下几个:

zbp_category、zbp_tag =>> typecho_metas (分类、标签)

zbp_post =>> typecho_contents(文章、独立页面)

zbp_comment =>> typecho_comments(评论)

zbp_post =>> typecho_relationships(文章关联的分类和标签)

在上述几个表内,尽管字段名有所不同,但性质基本是一样的,自己对照看一下就明白了。

2、zblog数据表字段处理

typecho几个数据表的字段名和排序如下:

typecho-metas(分类、标签)
typecho-metas

typecho-contents(文章)
typecho-contents

typecho-comments(评论)
typecho-comments

对zblog的数据表字段名和排序进行处理,使之与typecho的字段名和排序一一对应。多出的字段可以先排在最后面(尽量先不要删除任何字段),若缺少的字段可以新增,如zbp_post数据表中没有modified(最后修改日期),就可以在“创建日期”后面新增一个字段,然后将“创建日期”的内容复制至“modified”字段内。

3、数据表导出、处理

分别将前述8个数据表以XML格式导出,并复制一份至其他文件夹备份(以防止数据转换出错)。

使用notepad软件对zblog各个数据表进行编辑,将数据表名、字段名全部替换为typecho相应的内容,然后将其复制至typecho对应数据表内(仅复制<table>标签内容,相同<table>条目覆盖即可,其他内容不作改动)。

三个需要注意的地方

① 在zblog中,文章分类和标签分别记录在zbp_category、zbp_tag两个表内,而typecho是放在同一个表内的,所以需要将处理过的zbp_category、zbp_tag两个表的内容复制到typecho_metas表中。

② 在zblog的zbp_post内有log_CateID、log_Tag两个字段(即分类id和标签id),而在typecho_contents内是没有这两个字段的。在typecho系统中文章与分类和标签的关联都是体现在typecho_relationships数据表中的,在typecho_relationships中每一行数据表示一种归属关系,不管分类或是标签都是一行,对应id为typecho_metas中的内容。所以需要将zbp_post中的log_CateID、log_Tag两个字段内容都复制至typecho_relationships数据表中,仅保留cid和mid两个字段即可。

③ 在zblog中若某篇文章有多个标签,则在zbp_post对应的某行数据的log_Tag字段中会存在多个以{}符号分隔的标签id,此时如果需要保留全部标签,就需要手动将多个标签id分拆为多条记录并添加至typecho_relationships数据表中。在这个事情上我就偷了个懒,每篇文章仅仅保留了一个标签id,其他全部清除了。

4、数据表导入

在phpmyadmin中将typecho系统的typecho_metas、typecho_contents、typecho_comments、typecho_relationships四个数据表删除,再将本地修改好的四个typecho数据表导入系统,若执行命令后未报错即为成功,否则应根据错误信息检查、修改XML文件内容,一般会因为存在多条相同记录而报错。

5、最后优化

经过上述处理,zblog数据转换typecho基本就大功告成了。

在前台随便打开几遍文章,看看是否存在其他显示问题。由于zblog一般采用html代码编辑文章,而typecho采用的是markdown模式编辑,所以在数据转换后可能会在文章页面留下一些html代码(一般是由于zbog发表文章时采用了非默认的style样式),使用SQL命令进行批量替换即可。

需要用到的几个小诀窍:

① SQL命令:数据表字段内容的复制

update 表名 set Column_Name1=Column_Name;
(将字段name的内容复制至name1)

② SQL命令:字符替换

update 表名 set Column_Name=replace(Column_Name,'text','text1')
(用“text1”替换“text”,若text1改为空值即为查找text并删除)

③ Notepad“正则表达式”查找模式

(.*) 表示任意长度的任意字符,类似于word查找中的通配符 *

\r 表示换行符

notepad-find

④ 有个PostsCategoryChange的插件很好用,可以批量更改文章分类、状态(公开|隐藏|私密),最后可根据需要做最终优化调整。但每篇文章必须关联且仅能关联一个分类id,否则更改文章分类时插件会提示操作失败。

已有 30 条评论
  1. 灰常记忆

    你这操作厉害了,我很中意typecho。

    灰常记忆 回复
  2. 跋涉者

    厉害了,纯手工牛逼

    跋涉者 回复
  3. 老俍

    Typecho现在挺火~~~Wordpress不也挺好的吗?

    老俍 回复
    1. 胡记

      @老俍

      感觉速度还是typecho更胜一筹。

      胡记博主 回复
      1. 猫叔

        @胡记

        Typecho的扩展性比不了WordPress,但个人博客Typecho绝对够用,响应速度还快。

        猫叔 回复
  4. repostone

    对于不懂得问题随便说点什么。

    repostone 回复
  5. 龙哥

    胡记,请问下zblog如何转到WordPress呢?

    龙哥 回复
    1. 胡说胡记

      @龙哥

      龙哥,我记得WordPress官方貌似就有插件的吧,你搜索一下。如果要手工转应该也可以,方法参考本文。

      胡说胡记 回复
  6. 小彦

    还有这种骚操作的,涨知识了

    小彦 回复
  7. 老虎

    做得很不错。

    老虎 回复
  8. James

    好久没有更新了老哥。

    James 回复
  9. 奶爸de笔记

    我记得我最早的博客就是用的z-blog,那些年用z-blog的人还挺多的。后来大多数都转php的了。

    奶爸de笔记 回复
  10. 响石潭

    感受怎么样,和zblog比有哪些不同

    响石潭 回复
  11. 龙哥

    我现在想从zblog转到wordpress或者typecho,但是网站都没有找到方法。。。。

    龙哥 回复
  12. 林三

    如果让我转换的,我希望能有写好的程序工具,css还没学好,不想学习sql的知识。

    林三 回复
  13. Anseong

    看来选择Typecho的大神越来越多了

    Anseong 回复
  14. 张波博客

    纯手工,这个可是技术活,一般人搞不来的

    张波博客 回复
  15. 华哥博客

    你善于折腾

    华哥博客 回复
  16. James

    这个样子看着不错,好久没有来看看你的博客了。

    James 回复
  17. 程志辉

    哈哈,学好数据库还是很有必要的~

    程志辉 回复
  18. 麻辣

    虽不明但觉厉

    麻辣 回复
  19. 图拉丁之家

    老哥,你用衡天主机多久了,稳不稳。
    是香港的虚拟机还是VPS

    图拉丁之家 回复
  20. 鸟叔

    从wp转到typecho比较容易

    鸟叔 回复
  21. Mr.Chou

    手工转,我是不懂…我也是今年才换的typecho程序…很适合个人博客

    Mr.Chou 回复
  22. 大事记

    教程还是蛮实用的,啥时候能有一种工具,随时转换那就牛逼了

    大事记 回复
  23. faw.life

    不懂 感觉挺难的。

    faw.life 回复
  24. 简单生活

    Typecho如同小家碧玉,我也打算建一个!

    简单生活 回复
  25. 青山

    工程量貌似不小。zblog转WordPress,最新教程都是几年前的了,好像都失效了,还是要手动改数据库,数据表。WordPress转typecho就容易多了,一个typecho插件,几分钟的事情就搞定了哈哈。

    青山 回复
    1. 胡记

      @青山

      的确有点麻烦的,我搞了大半天呢,不过还好没有留下什么遗憾,全都转换过来了。

      胡记博主 回复
      1. 青山

        @胡记

        你https还没上哦

        青山 回复
发表新评论

TOP