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表中的废弃字段,不仅能保持后台清爽,还能提升数据库效率。

Reward this article