MySQL 批量替換指定字段中字符串的標準語法:
UPDATE `table_name`
SET `column_name` = REPLACE(`column_name`, 'old_str', 'new_str')
WHERE condition;
| 參數 | 含義 |
|---|---|
table_name | 目標表名 |
column_name | 目標字段名 |
old_str | 被替換的子串(區分大小寫) |
new_str | 替換後的新子串 |
WHERE condition | 可選,限定範圍,避免全表掃描 |
UPDATE `pre_forum_post` SET `author` = REPLACE(`author`, '祥磊部落', '祥磊');
注意:表前綴 pre_ 需替換為實際項目配置。
UPDATE phpcms_article SET title = REPLACE(title, '[2009]', '〔2009〕');
UPDATE phpcms_article SET content = REPLACE(content, '[2009]', '〔2009〕');
UPDATE wp_posts
SET post_content = REPLACE(post_content, '搜索引擎優化', '搜索引擎營銷')
WHERE ID < 200;
UPDATE `cdb_settings`
SET `value` = ''
WHERE CONVERT(`variable` USING utf8) = 'adminipaccess'
LIMIT 1;
此處CONVERT(... USING utf8)用於解決字符集比較不匹配問題,LIMIT 1確保單行更新安全。
SELECT COUNT(*) FROM `table` WHERE `column` LIKE '%old_str%';
確認預影響行數,防誤操作。
百萬級數據建議分批次執行:
UPDATE `big_table`
SET `col` = REPLACE(`col`, 'old', 'new')
WHERE `col` LIKE '%old%'
AND id BETWEEN 1 AND 10000; -- 分批次 ID 範圍
START TRANSACTION;
UPDATE ...;
-- 檢查 ROW_COUNT() 是否符合預期
COMMIT; -- 或 ROLLBACK;
REPLACE(column, 'a', 'b') 會替換所有出現的 'a',非僅首次UPDATE ... SET col = REPLACE(col, ...) 是 MySQL 批量字符串替換的標準利器。掌握驗證先行、分批執行、事務保護、索引輔助四大原則,可安全高效完成從簡單文本清洗到複雜業務數據修正的各類任務。