wp-cli search-replace understands serialised data

A plain SQL find-and-replace on a WordPress database corrupts every serialised array containing the string, because PHP serialisation records string lengths and the replacement changes them.

$ wp search-replace 'https://old.example' 'https://new.example' --dry-run
Success: 4,120 replacements to be made.

$ wp search-replace 'https://old.example' 'https://new.example' 
    --skip-columns=guid --precise --all-tables-with-prefix

--dry-run first is not optional; it takes seconds and reports per table. Skipping guid is the convention because the GUID is an identifier rather than a URL and changing it makes feed readers treat every post as new. --precise forces PHP-level replacement rather than the faster SQL path, which is slower and handles nested serialisation correctly — worth it on any database that has been through a few plugins.