使用 dede_archives 表的 Replace 功能
DedeCMS的后台并没有提供一个可视化的“全文搜索替换”功能,所以最直接、最安全的方法是使用数据库管理工具(如phpMyAdmin)来执行SQL的 UPDATE 和 REPLACE 语句。

我们主要操作的是文章内容主表 dede_archives 和文章详细内容表 dede_addonarticle(或其他类型的附加表,如 dede_addonsoft 等)。
替换条件详解
“替换条件”决定了你要替换哪些记录,条件由 WHERE 子句来定义,以下是一些常见的替换条件:
按栏目ID替换
这是最常用的条件之一,如果你只想替换某个特定栏目下的文章内容。
-
语法:
WHERE typeid = '你的栏目ID'
(图片来源网络,侵删) -
示例: 只替换ID为
5的栏目下的所有文章标题和内容。-- 替换标题 UPDATE dede_archives SET title = REPLACE(title, '旧关键词', '新关键词') WHERE typeid = '5'; -- 替换内容 UPDATE dede_addonarticle SET body = REPLACE(body, '旧关键词', '新关键词') WHERE aid IN (SELECT aid FROM dede_archives WHERE typeid = '5');
按文章ID范围替换
如果你想精确地替换一批特定的文章,可以指定它们的ID范围。
-
语法:
WHERE id BETWEEN '起始ID' AND '结束ID'或WHERE id IN ('1', '3', '5', '8') -
示例: 替换ID从
100到200的所有文章。-- 替换标题 UPDATE dede_archives SET title = REPLACE(title, '旧关键词', '新关键词') WHERE id BETWEEN '100' AND '200'; -- 替换内容 UPDATE dede_addonarticle SET body = REPLACE(body, '旧关键词', '新关键词') WHERE aid BETWEEN '100' AND '200';
按发布时间范围替换
如果你需要替换某个时间段内发布的文章。
-
语法:
WHERE pubdate BETWEEN '开始时间' AND '结束时间' -
注意: 时间格式通常是
YYYY-MM-DD HH:MM:SS。 -
示例: 替换2025年1月1日到2025年1月31日期间发布的所有文章。
-- 替换标题 UPDATE dede_archives SET title = REPLACE(title, '旧关键词', '新关键词') WHERE pubdate BETWEEN '2025-01-01 00:00:00' AND '2025-01-31 23:59:59'; -- 替换内容 UPDATE dede_addonarticle SET body = REPLACE(body, '旧关键词', '新关键词') WHERE aid IN (SELECT aid FROM dede_archives WHERE pubdate BETWEEN '2025-01-01 00:00:00' AND '2025-01-31 23:59:59');
按关键词存在条件替换
这是一个非常强大的条件,它只对包含特定关键词的记录进行替换,避免无用的操作。
-
语法:
WHERE title LIKE '%旧关键词%'或WHERE body LIKE '%旧关键词%' -
示例: 只替换标题中包含“织梦CMS”的文章,将其替换为“DedeCMS”。
-- 替换标题 UPDATE dede_archives SET title = REPLACE(title, '织梦CMS', 'DedeCMS') WHERE title LIKE '%织梦CMS%'; -- 替换内容 UPDATE dede_addonarticle SET body = REPLACE(body, '织梦CMS', 'DedeCMS') WHERE body LIKE '%织梦CMS%';
组合条件
你可以使用 AND 和 OR 来组合多个条件,实现更精确的控制。
- 语法:
WHERE 条件1 AND 条件2 - 示例: 替换“产品介绍”栏目(ID=3)中,标题包含“旧版”的所有文章。
UPDATE dede_archives SET title = REPLACE(title, '旧版', '新版V2.0') WHERE typeid = '3' AND title LIKE '%旧版%';
完整的替换操作步骤
第一步:备份数据库(至关重要!)
在进行任何数据库操作之前,务必备份数据库!这是防止操作失误导致数据丢失的唯一有效方法,你可以通过phpMyAdmin的“导出”功能完成备份。
第二步:登录phpMyAdmin
在你的网站控制面板中找到phpMyAdmin,并登录到你的DedeCMS数据库。
第三步:选择数据库
在左侧列表中,选择你的DedeCMS数据库名称。
第四步:执行SQL替换语句
场景:将全站所有文章标题和内容中的“旧域名”替换为“新域名”。
-
替换文章标题 (
dede_archives表)- 点击顶部的“SQL”选项卡。
- 在输入框中粘贴并执行以下语句:
UPDATE dede_archives SET title = REPLACE(title, 'www.old-domain.com', 'www.new-domain.com');
- 点击“执行”,如果执行成功,它会显示受影响的行数。
-
替换文章内容 (
dede_addonarticle表)- 再次点击“SQL”选项卡。
- 执行以下语句:
UPDATE dede_addonarticle SET body = REPLACE(body, 'www.old-domain.com', 'www.new-domain.com');
- 点击“执行”。
重要提示:
dede_addonarticle是文章模型的内容表,如果你的网站使用了其他模型,比如软件(dede_addonsoft)、图集(dede_addonimages)等,你需要分别对这些表执行类似的UPDATE语句。- 如果替换的是HTML代码,确保你的替换字符串是完整的,替换
<a href="old">为<a href="new">。
第五步:更新网站缓存
替换完成后,登录DedeCMS后台,执行以下操作以确保数据同步:
- 【系统】 -> 【一键更新网站】:
- 勾选“更新所有栏目HTML”、“更新所有文档HTML”。
- 点击“开始更新”,这一步会重新生成所有页面的静态文件,使替换后的内容在前台显示出来。
高级技巧与注意事项
-
大小写敏感问题 默认情况下,MySQL的
REPLACE函数是大小写敏感的,如果你想进行不区分大小写的替换,可以使用LOWER()或UPPER()函数。-
示例: 将所有 "dede" (无论大小写) 替换为 "DedeCMS"。
-- 替换标题 (不区分大小写) UPDATE dede_archives SET title = REPLACE(LOWER(title), 'dede', 'DedeCMS') WHERE LOWER(title) LIKE '%dede%'; -- 替换内容 (不区分大小写) UPDATE dede_addonarticle SET body = REPLACE(LOWER(body), 'dede', 'DedeCMS') WHERE LOWER(body) LIKE '%dede%';
-
-
特殊字符转义 如果你的“旧关键词”或“新关键词”中包含单引号 (),可能会导致SQL语法错误,你需要对单引号进行转义,即用两个单引号 () 代替一个。
- 示例: 替换
O'Reilly为Wiley。UPDATE dede_archives SET title = REPLACE(title, 'O''Reilly', 'Wiley');
- 示例: 替换
-
分批处理 如果你的文章数量非常庞大(例如几十万篇),一次性执行
UPDATE可能会锁表,导致网站暂时无法访问,建议分批处理,例如按ID范围每次处理几千条。- 示例: 每次处理ID从1到5000的文章。
UPDATE dede_archives SET title = REPLACE(title, '旧关键词', '新关键词') WHERE id BETWEEN '1' AND '5000';
执行完毕后,再执行
5001到10000,以此类推。
- 示例: 每次处理ID从1到5000的文章。
-
只替换文章内容,不替换标题 如果你只想修改文章正文,只操作
dede_addonarticle表即可。 -
检查替换结果 替换并更新网站后,随机抽查几个栏目和文章,检查前台显示是否正确,特别是检查替换是否成功,以及有无格式错乱等问题。
| 操作步骤 | 核心命令 | 说明 |
|---|---|---|
| 备份数据库 | - | 最重要的一步,防止数据丢失! |
UPDATE dede_archives SET title = REPLACE(title, '旧', '新') [WHERE 条件]; |
操作 dede_archives 表 |
|
UPDATE dede_addonarticle SET body = REPLACE(body, '旧', '新') [WHERE 条件]; |
表,其他模型同理 | |
| 更新网站 | 后台【一键更新网站】 | 重新生成静态文件,使修改生效 |
通过以上方法,你可以安全、高效地在DedeCMS中完成各种复杂的数据替换任务,请务必记住,操作前备份,操作后验证。
