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;📌 重要提醒
- 操作前务必备份数据库!
- 不要删除当前主题正在使用的字段,否则可能导致样式异常。
- 清理后,文章编辑页的“自定义字段”区域会自动变干净。
8 条评论
还有就是一些插件启用就会在数据库里面加表,强迫症的我从来不用插件,就是因为后面关了之后不知道会残留什么东西。
我就用评论邮件通知插件,还有主题自带的一个必须安装的插件
我对自定义字段使用比较谨慎,目前现在就用了两个,一个是置顶的自定义字段,另外一个就是摘要的自定义字段,这两个我当时用的时候还是比较小心,想着即便是换主题,这些字段也会用到,不算是冗余。
增加好增加,删减的时候就麻烦,和做产品一样,堆功能谁不会啊,难就难在如何做减法……
摘要可以在编辑文章的时候用more标签分割就好了,但是只能分割标签之前的某段,不能灵活自定义
细致呀。
折腾过程记录一下,下次折腾方便
原来如此,不过我的数据库是在docker,删除挺麻烦
不删也没影响,我强迫症而已