本文就是要將已經建立的資料庫修改編碼,但免不了需要停機的狀況,必須注意
修改 MySQL 環境設定
Step.1 先修改 MySQL 的環境設定,讓之後建立的資料庫都使用編碼 UTF8
$ vim /etc/my.cnf
[mysqld]
default-character-set=utf8
default-collation=utf8_unicode_ci
character-set-server=utf8
collation-server=utf8_unicode_ci
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#重新啟動MySQL讓設定生效
$ service mysqld restart
修改 Database 編碼為 UTF8
假設我的資料庫為 dbdata
$ mysql -uroot -p dbdata
#查詢資料庫編碼
mysql> status;
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id: 2
Current database: dbdata
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: utf8
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 min 57 sec
Threads: 1 Questions: 10 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 9 Queries per second avg: 0.85
注意到 Db characterset 的編碼是 latin1
修改資料庫編碼 UTF-8
mysql> ALTER DATABASE dbdata CHARACTER SET utf8 COLLATE utf8_general_ci;
#再查詢編碼
mysql> status;
...
Db characterset: utf8
...
資料庫編碼已經修改為 utf8,如果你的 Tables 很不幸的也是 latin1 建立的話,請繼續以下步驟
修改 Tables 編碼為 UTF8
把資料庫都 dump 出來進行轉碼再匯入資料庫
$ mysqldump -uroot -prootpw --default-character-set=latin1 --skip-set-charset dbdata > dbdata.sql
#將latin1 取代成 utf8
$ sed -i 's/latin1/utf8/g' dbdata.sql > dbdata_utf8.sql
#匯入MYSQL
$ mysql -uroot -prootpw --default-character-set=utf8 dbdata < dbdata_utf8.sql
在這邊資料庫修改就告一段落了,如果你的前端頁面還是顯示亂碼,就必須從後端語言的設定著手了(php, python ..)
Orignal From: MySQL 將預設資料庫編碼 latin1 改為 UTF8
沒有留言:
張貼留言