2008年4月30日 星期三

在小白上安裝 MySQL

最近因為工作的需求所以要安裝 MySQL 。
以往在安裝 MySQL 都是在 Windows 版本下安裝,這算是第一次在 Mac 的環境下安裝 MySQL。整個過程真的是很不順利。

首先我到 MySQL 的官網上去抓到一個 5.0.51a 的版本。
現在 MySQL for Mac 的版有 package format 和 TAR package 二種,為了求方便,我 Download package format版本。這個版本只需要按下一步下一步,MySQL 就會很順利地安裝完成。很幸運的這個過程也都沒有發生什麼問題。
我也順便安裝 MySQL 所提供的 Tool 。

當這一切美好的事情都完成後,我想 MySQL 應該是可以使用了。
沒錯, 我將 Create Table 和 Insert data 的 Script 執行後,但在 Database 中欄位的中文資料都變成了 ??

天呀!我的中文變成了亂碼了。
在 MySQL 的 Command 模式下執行 status; 就可以顯示目前 MySQL 的狀態。

mysql> status;
--------------
./mysql Ver 14.12 Distrib 5.0.51a, for apple-darwin8.11.0 (powerpc) using readline 5.0

Connection id: 6
Current database: cps
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /tmp/mysql.sock
Uptime: 3 min 51 sec

Threads: 1 Questions: 126 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.545

原來是 characterset 都 latin1 ,所以無法顯示中文。
在網路上找到一些解決 MySQL 無法顯示中文的方法。
我在 /etc 下建了一個 my.cnf 的檔案,寫入



[client]
port = 3306
socket = '/tmp/mysql.sock'
default-character-set= utf8

[mysqld]
port = 3306
default-character-set= utf8
collation_server=utf8_unicode_ci
character_set_server=utf8
socket = '/tmp/mysql.sock'


存檔後再將 MySQL 重新下上,status 看一下:
mysql> status;
--------------
./mysql Ver 14.12 Distrib 5.0.51a, for apple-darwin8.11.0 (powerpc) using readline 5.0

Connection id: 6
Current database: cps
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.51a-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock

看起來只有 Client 和 Conn. 的部份有改變,但對於 Db 和 Server 都還是一樣。
在 Create database 時,我在 Create database ... 後再加上 character set 。

CREATE DATABASE db_name CHARACTER SET utf8 COLLATE utf8_swedish_ci;
在 Create database 後再以 status 看,只剩 Server characterset 是 latin1。不過再將資料 Insert 到 Table 中,還是亂碼。
我就為了這個問題,耗了一個下午。

後來我再上 MySQL 的官網去 DownLoad 5.0.51b 版.

在網路上找到一個方法,可以解決中文的問題。
將 /usr/local/mysql/support-files/my-medium.cnf Copy 到 /etc 下,並更名為 my.cnf
cp /usr/local/mysql/support-file/my-medium.cnf /etc/my.cnf

  • my-huge.cnf: 適合 1GB - 2GB RAM的主機使用。
  • my-large.cnf: 適合 512MB RAM的主機使用。
  • my-medium.cnf: 只有 32MB - 64MB RAM 的主機使用,或者有 128MB RAM 但需要運行其他伺服器,例如 web server。
  • my-small.cnf: 記憶體少於 64MB 時適用這個,MySQL 會佔用較少資源。

在 my.cnf 中 [client] 下加入
default-character-set=utf8

[mysqld]下加入
default-character-set=utf8
default-collation=utf8_general_ci

然後再重新啟動 MySQL 就可以了。
不曉得是不是 5.0.51a 和 5.0.51b 有什麼不同,這樣子居然好了。

1 則留言:

匿名 提到...

最簡單的方式:

1. 在每次與 MySQL 建立連線以後,使用 SQL指令:
SET NAMES utf8 即可,不需要去改 my.cnf。

2. 如果某資料表的某欄位要存中文,就寫

CHAR(XX) CHARACTER SET utf8....

XX 最好是 3的倍數,因為 utf8是每三個字元存一個字。