mysql数据表latin1编码导致中文乱码问题
程序员文章站
2024-01-26 22:07:05
...
前几天一位朋友使用wordpress搭建的个人网站升级。升级完后页面内容全部变成了乱码。找我帮忙解决。
经过研究发现应该是mysql数据库升级导致的。他的网站建站至少20多年了,当时mysql中文编码还是使用的latin1。
解决方案是将表和字段编码格式修改为utf8,
ALTER TABLE `table` DEFAULT CHARACTER SET utf8;
修改了表的编码格式,但有一些字段比如text仍然是使用Latin1编码的。使用上面的命令可以看字段的编码格式。
show create table wp_comments;
其中的comment_author,comment_content等类型为text的字段使用的是latin1编码。可以通过下面的语句将字段的编码格式也修改为utf8。
alter table wp_comments change comment_content comment_content text character set utf8 not null;
如果一个个的修改闲麻烦,还可以直接执行下面的命令,修改一张表的全部字段编码格式。
--修改表的编码格式
ALTER TABLE wp_comments DEFAULT CHARACTER SET utf8;
--修改表中所有字段的编码格式
ALTER TABLE wp_comments CONVERT TO CHARACTER SEt utf8;
但以上只是修改了编码格式,但存储的内容还是以latin1识别的形式存放的,依然乱码。这时候可以通过对字段内容编码转换后进行更新。如果不放心,可以先找一条记录进行测试:
UPDATE wp_comments
SET comment_author = CONVERT (unhex (hex (CONVERT (comment_author USING latin1))) using utf8) WHERE comment_id = '47';
上面的方法完美解决了朋友的问题。不过在此之前,我使用了费劲却不理想的方法。通过将数据表内容导出再导入的方式。
-- 导出建表语句和数据内容
mysqldump -u用户名 -p 数据库名 wp_posts > wp_posts.sql
然而网站的服务器非常慢,使用winscp传输到个人笔记本上超级慢。我又将文件复制到我另一台vps上,
--将wp_post.sql复制到另一台远程服务器
scp ./wp_post.sql [email protected]地址:/home/目标文件夹
然后使用winScp把文件传输到自己的笔记本。因为我个人的笔记本上有安装mysql,操作起来比较快。
然后在本地mysql数据库中使用下面的数据导出为正确内容替换wp_posts.sql的数据内容部分。
--导出wp_posts的正确内容
SELECT post_date, ...省略其它字段, CONVERT (unhex (hex (CONVERT (post_title USING latin1))) using utf8) as post_title, convert(unhex(hex(convert(post_content using latin1))) using utf8) as post_content FROM wp_posts
修改wp_posts.sql中的建表语句为utf8格式后,将文件上传到服务器,
scp -P 22 [email protected]地址:/home/目录/wp_posts.sql web服务器目录
重命名原来的表作为备份。
ALTER TABLE wp_posts RENAME wp_posts_backup;
使用source命令重新建表和导入数据。
source /web服务器目录/wp_posts.sql;
上面的方法我居然成功了。早知可以直接使用开头update的方法,我干嘛这么费劲巴拉。
推荐阅读
-
mysql数据表latin1编码导致中文乱码问题
-
MySQL编码不一致导致乱码问题解决
-
设置MySql5.5数据库的字符编码为UTF8,解决中文乱码问题_MySQL
-
Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)_MySQL
-
MySQL编码不一致导致乱码问题解决
-
娌圭敾 将这个乱码转成中文,是PHP跟MYSQL数据库弄的!有关编码utf8,latin1!解决方案
-
解决mysql的默认字符编码和中文乱码问题
-
Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)_MySQL
-
解决mysql的默认字符编码和中文乱码问题
-
困扰我的编码问题(导致中文乱码),由解!!!