Heroku ClearDB欧元与重音字母在MySQL Workbench显示乱码怎么解决
解决方案
这是典型的MySQL全链路字符集不统一导致的问题,你设置的系统LANG变量仅影响操作系统层面的字符解析,和MySQL服务、客户端连接的字符集配置无关,所以无法解决该问题,可按以下步骤排查修复:
- 第一步:确认ClearDB数据库、表、字段的字符集配置
执行以下SQL查询全局字符集配置:SHOW VARIABLES LIKE 'character_set_%';
执行以下SQL查询对应业务表的字符集配置:SHOW CREATE TABLE 你的业务表名;
确保character_set_client、character_set_connection、character_set_results、character_set_database、表和字段的字符集都统一为utf8mb4(MySQL原生的utf8为utf8mb3,仅支持最多3字节的Unicode字符,utf8mb4才是完整支持全Unicode字符包括特殊符号、emoji的标准UTF-8字符集)。如果需要修改库/表/字段的字符集,可执行对应SQL:
修改库字符集:ALTER DATABASE 库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
修改表字符集:ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 第二步:在PHP代码中显式指定数据库连接字符集
不要依赖默认的连接字符集配置,建立数据库连接后主动声明字符集:
若使用PDO扩展,在DSN中增加字符集声明:$pdo = new PDO('mysql:host=主机名;dbname=库名;charset=utf8mb4', '用户名', '密码');
若使用mysqli扩展,建立连接后执行设置:mysqli_set_charset($conn, 'utf8mb4'); - 第三步:修改MySQL Workbench的连接字符集配置
打开MySQL Workbench的连接编辑界面,切换到Advanced标签页,在Others输入框中添加以下配置:default-character-set=utf8mb4
保存后重新连接数据库即可正常显示欧元、重音等特殊字符。 - 存量乱码数据修复
如果之前写入的数据已经存在编码错误,可先完整备份数据库,再通过先转二进制再转utf8mb4的方式修复:ALTER TABLE 表名 MODIFY 字段名 BLOB;ALTER TABLE 表名 MODIFY 字段名 原字段类型(长度) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
内容的提问来源于stack exchange,提问作者joisberg
相关产品推荐
相关产品推荐

