2003年吧(正確年份已經不可考)我用CentOS的linux架設了Web Server,內含php,apache,mysql,webmin。當時是用於 Invision community 的PowerBoard,之後也有用到 WordPress ,因為2003年迄今年代久遠,CentOS已經不再做更新支援,apache與mysql及php也沒有做版更,所以這些網站也就沒有作升級,每每要升級就遇到一些問題,最大一個問題就是當時架站的時候沒有把SQL資料庫的編碼給弄好,畢竟是自己爬文架設web server的。
透過phpmyadmin可以看到該資料庫的編碼如下圖
資料庫的編碼,與排序都是 latin1,之前很多次都沒法轉換成功(從latin1轉utf8),今天不知道哪根筋不對,突然就茅塞頓開
今天參考到
Mysql資料庫轉csv檔,中文會變成亂碼 <—有參考價值但是沒有解決我的問題
在這篇文章中我翻到 政府開放平台網站裡面的 下載資料集的CSV檔,打開來為亂碼,怎麼辦? 這篇文章 <–也是有參考價值單是沒有用
最後透過google大神搜尋這字串 “latin1轉utf8″找到 MySQL 將預設資料庫編碼 latin1 改為 UTF8 這篇重要的文章,也讓我今天把SQL資料庫從latin1轉成utf8
溫馨提醒:更動資料庫前請先做備份,且資料庫有可能暫時停止使用
請用你熟悉的方式連入你的主機
# mysql -u 你的sql帳號 -p 資料庫名稱
這邊我是下 #mysql -u root -p photo-old
進入到mysql,再下指令查詢資料庫的編碼 #status
如上圖的標記,可以清楚看到 photo-old的資料庫編碼就是latin1
[root@www Backup]# mysql -u root -p photo-old
mysql> status
————–
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (i386) using readline 5.1
Connection id: 1822791
Current database: photo-old
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.1.73 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 70 days 19 hours 12 min 32 sec
Threads: 1 Questions: 39746265 Slow queries: 2155 Opens: 115744 Flush tables: 1 Open tables: 64 Queries per second avg: 6.497
————–
接著下指令 把資料庫編碼改為utf8
# ALTER DATABASE photo-old CHARACTER SET utf8 COLLATE utf8_general_ci;
之後再 # status
就可以發現,DB的編碼已經變成utf8
mysql> status
————–
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (i386) using readline 5.1
Connection id: 1822793
Current database: photo-old
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.1.73 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
確定資料庫連線為utf8了,那就透過command指令把 photo-old資料庫 dump出來,指令如下
#mysqldump -u root -p –default-character-set=latin1 photo-old > photo-old.sql
當SQL資料庫dump出來之後,接著把整個photo-old資料庫的table取代成utf8,指令如下
# sed -i ‘s/latin1/utf8/g’ photo-old.sql > photo-old_utf8.sql
最後再把photo-old_utf8.sql從phpmyadmin匯入到photo-old的資料庫內
注意順序(在phpmyadmin中)
1.新增資料庫
2.資料庫名稱 photo-old ,資料庫編碼選 utf8mb3_general_ci 然後按新增
3.點選左側 photo-old資料庫,在點選畫面中間的”匯入”,選剛剛的photo-old_utf8.sql ,最後按下匯入,將資料庫匯入
用phpmyadmin打開 photo-old資料庫
接著打開table看看,裡面的數值有沒有正常顯示???
完成