昨天折騰了一下自己的網(wǎng)站,試圖進(jìn)行一些遷移工作,這其中遇到的首要問(wèn)題是Mysql的亂碼問(wèn)題。 由于Mysql是從版本 4遷移到Version 5的,原來(lái)的字符集是latin1,現(xiàn)在是UTF8,這就遇到了經(jīng)典的亂碼問(wèn)題,即使通過(guò)phpadmin來(lái)訪問(wèn),也是一片紛亂,還好在前端的展現(xiàn)正常。
在網(wǎng)上搜一下,很多帖子和方法,最后我通過(guò)如下步驟,終于糾正了多年來(lái)的亂碼問(wèn)題。
首先亂碼是由于字符集的變化和混亂造成的。
[root@localhost plugins]# /mysql -hlocalhost -ueygle -p eygle
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1693469
Server version: 5.0.45 Source distribution
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql> show variables like ’%char%’;
+————————–+———————————-+
| Variable_name | Value |
+————————–+———————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /opt/mysql/share/mysql/charsets/ |
+————————–+———————————-+
8 rows in set (0.00 sec)
現(xiàn)在的字符集是utf8,但是由于原來(lái)是latin1的字符集,我使用latin1進(jìn)行導(dǎo)出:
mysqldump -hlocalhost -ueygle -p –default-character-set=latin1 blog >blog.sql
這樣導(dǎo)出之后,如果打開(kāi)看,正文應(yīng)當(dāng)都是正常顯示才對(duì),然后更改字符集,將所有表的字符集設(shè)置改為utf8,在vim中的命令是:
:%s/latin1/utf8/g
再執(zhí)行導(dǎo)入操作:
mysql -hlocalhost -ueygle -p eyglenew < blog.sql
這樣我終于看到了久違的,正確的中文,現(xiàn)在的數(shù)據(jù)庫(kù)字符集看起來(lái)是這個(gè)樣子的:
mysql> show variables like ’%char%’;
+————————–+———————————-+
| Variable_name | Value |
+————————–+———————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /opt/mysql/share/mysql/charsets/ |
+————————–+———————————-+
8 rows in set (0.00 sec)
記錄一下,供遇到此類情況的朋友參考。
