You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SQL备份读取旧MediaWiki(1.16版本)页面文本?

提取旧MediaWiki(1.16版本)SQL备份中的页面内容

你的猜测完全正确!MediaWiki 1.16版本确实把页面核心内容存在text表中,你看到的二进制编码其实是因为内容默认做了gzip压缩处理,所以直接读取会显示乱码。我之前处理过类似的旧Wiki备份,下面给你一步步拆解怎么提取出可读内容:

第一步:定位目标页面对应的内容ID

MediaWiki的page表记录了所有页面的基本信息,其中page_latest字段关联着text表的old_id(也就是当前版本页面内容的唯一标识)。你可以用SQL先找到目标页面的这个关联ID:

-- 替换成实际页面标题,注意标题里的空格会被存成英文下划线,比如"我的技术笔记"要写成"My_Tech_Notes"
SELECT page_id, page_latest, page_title FROM page WHERE page_title = '你的页面标题';

如果记不清完整标题,用模糊查询缩小范围:

SELECT page_title, page_latest FROM page WHERE page_title LIKE '%关键词%';

第二步:解压并读取二进制内容

拿到page_latest对应的old_id后,就可以去text表提取内容了,分两种情况:

  • 如果内容是gzip压缩的:查看text表的old_flags字段,要是包含g标记,就用MySQL的UNCOMPRESS()函数解压:
    SELECT UNCOMPRESS(old_text) AS page_content FROM text WHERE old_id = '你查到的old_id值';
    
  • 如果没有压缩:如果old_flags里没有g,直接把二进制数据转成字符串即可:
    SELECT CAST(old_text AS CHAR) AS page_content FROM text WHERE old_id = '你查到的old_id值';
    

批量提取小技巧

要是你需要一次性提取多个页面的内容,可以直接关联page和text表查询:

SELECT p.page_title, UNCOMPRESS(t.old_text) AS page_content
FROM page p
JOIN text t ON p.page_latest = t.old_id
WHERE p.page_title IN ('页面标题1', '页面标题2', '页面标题3'); -- 替换成你需要的页面标题列表

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:38:07