WordPress与数据库编码不匹配及迁移乱码问题求助
主问题:将Latin1配置的WordPress站点统一改为utf8mb4_unicode_ci,修复希伯来语乱码
先明确现状:当前站点属于双重编码巧合兼容——WordPress以latin1编码连接数据库,把希伯来语的UTF-8字节当作latin1字符存入utf8mb4数据库;读取时又按latin1读取,再转成UTF-8输出,所以前端显示正常。要统一编码,需把数据库里的乱码还原为正确希伯来语,再同步WordPress配置。
操作步骤:
- 先备份数据库:避免操作失误丢数据,用phpMyAdmin导出全库,或用命令行:
mysqldump -u 你的数据库用户名 -p 数据库名 > backup.sql - 修改所有表和字段的字符集:
要么用phpMyAdmin批量操作(选中所有表,在「操作」里选择修改表字符集),要么执行SQL生成批量修改语句:-- 先修改数据库默认字符集 ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 生成所有表的修改命令,复制结果执行 SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') FROM information_schema.tables WHERE table_schema = '你的数据库名' AND table_type = 'BASE TABLE'; - 修复存储的乱码文本:
数据库里的乱码是UTF-8字节被转成latin1存储的,要转回来。对每个含文本的字段(比如post_content、post_title、meta_value)执行:
不确定哪些字段需要修改?先查询所有文本类型字段:UPDATE 表名 SET 字段名 = CONVERT(CONVERT(字段名 USING latin1) USING utf8mb4);SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = '你的数据库名' AND data_type IN ('varchar', 'text', 'mediumtext', 'longtext'); - 更新wp-config.php配置:
替换为utf8mb4相关配置:/** Database charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8mb4' ); /** The database collate type. Don't change this if in doubt. */ define( 'DB_COLLATE', 'utf8mb4_unicode_ci' ); - 验证结果:刷新网站前端和后台,确认希伯来语文本显示正常。
附加问题:Duplicator迁移后乱码,能否用它切换编码并保留修改?
可以,但需要调整导出和导入的编码设置,避免再次出现编码混乱:
操作步骤:
- 本地导出时配置编码:
打开Duplicator导出界面,找到「数据库选项」,设置字符集为utf8mb4、排序规则为utf8mb4_unicode_ci;进入「高级选项」,勾选「强制UTF8编码」,再生成备份包。 - 服务器端提前准备:
创建新数据库,设置默认字符集为utf8mb4_unicode_ci;同时把服务器上的wp-config.php修改为utf8mb4配置(即你之前调整的内容)。 - 用Duplicator导入备份:
导入过程中,Duplicator会自动按utf8mb4创建表和字段,同时保留你在本地做的所有修改。如果导入后仍有乱码,执行主问题里修复文本的SQL命令即可。
内容的提问来源于stack exchange,提问作者Meital
相关产品推荐
相关产品推荐

