Typecho的自定义字段功能强大,但频繁切换主题会导致数据库中堆积大量废弃字段。强迫症每次看到文章编辑窗口下面这些字段属实难受。今天就来研究一下这些字段的存储位置、产生原因和清理方法。
最近尝试了多个主题,发现一个令人头疼的问题:每个主题都会在文章编辑页下方添加自己的自定义字段(如封面图、副标题、音乐 ID 等);切换主题后,旧主题的字段依然保留在文章中;长期下来,每篇文章都积累了大量不再使用的字段,后台显得杂乱,数据库也逐渐膨胀。
虽然这些废弃字段不影响网站正常运行,但它们增加数据库体积;干扰编辑体验;可能引发字段名冲突(比如两个主题都用 cover 但含义不同)。
于是,我决定彻底搞清楚:这些字段存在哪?怎么安全清理?
📂 字段存储位置:typecho_fields 表
Typecho的自定义字段统一存放在数据库的typecho_fields表中。
表结构简要说明:
| 字段 | 说明 |
|---|---|
cid | 对应文章/页面的 ID(关联 typecho_contents 表) |
name | 自定义字段的名称(如 banner, subtitle, music_id) |
str_value | 字段的字符串值(绝大多数字段用这个) |
int_value | 整数值(较少用) |
type | 类型(通常为 str) |
也就是说,你在后台看到的每一个“自定义字段”,都是这张表里的一行数据。
🔍 如何查看当前有哪些字段?
通过phpMyAdmin或命令行,执行以下 SQL:
-- 查看所有不同的字段名(去重)
SELECT DISTINCT name FROM typecho_fields ORDER BY name;你会看到类似这样的结果:
banner
cover
music_id
sakura_subtitle
void_bg_color
...其中带主题前缀的(如 default_...)通常来自特定主题,而无前缀的可能是通用字段或早期遗留。
🧹 安全清理废弃字段的方法
方法一:按主题前缀批量删除
如果你的主题字段有统一前缀(如 default_),可直接删除:
-- 删除所有 oldtheme 开头的字段
DELETE FROM typecho_fields WHERE name LIKE 'oldtheme_%';方法二:删除已知无用的字段名
如果你确定某些字段不再需要(比如曾经用过但已弃用的 bg_image):
DELETE FROM typecho_fields
WHERE name IN ('bg_image', 'music_url', 'banner');方法三:清理空值字段(安全)
有些字段保存了但内容为空,可放心清除:
DELETE FROM typecho_fields
WHERE str_value = '' OR str_value IS NULL;📌 重要提醒
- 操作前务必备份数据库!
- 不要删除当前主题正在使用的字段,否则可能导致样式异常。
- 清理后,文章编辑页的“自定义字段”区域会自动变干净。
Typecho的灵活性让我们可以自由定制内容,但也需要我们主动管理数据整洁。通过定期清理typecho_fields表中的废弃字段,不仅能保持后台清爽,还能提升数据库效率。
4 条评论
细致呀。
折腾过程记录一下,下次折腾方便
原来如此,不过我的数据库是在docker,删除挺麻烦
不删也没影响,我强迫症而已