專業居家清潔
免費到府估價,清潔養護馬上搞定
室內設計一張保單輕鬆享有人生各階段風險保障
通通幫您規畫好

首頁  •  j2h 論壇 • 程式設計討論     • 

MySQL升級5.0與UTF-8之相關解決方法

房東:優妹
發表時間:2007-02-14


從MySQL4.0升級至5.0。

首先把資料dump出來 。由於先前用4.0時我的資料是存成latin1,不管是Big5或是wordpress的UTF-8存進去後都是變成lantin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上–default-character-set=latin1

如果原先是Big5的資料,像我的Coppermine Photo Gallery,dump出來後就直接把Big5轉成UTF-8即可

#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql

#piconv -f big5 -t utf8 output.sql >utf8.sql

如果原先是UTF-8的資料,像是wordpress,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8

#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql

#piconv -f utf8 -t big5 output.sql > big5.sql
#piconv -f big5 -t utf8 big5.sql >utf8.sql

接著MySQL5.0灌好後,MySQL的my.cnf設定檔內要加入以下設定

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci

但也有看到資料說[mysqld]那邊加上 default-character-set=utf8跟 default-collation=utf8_general_ci後,一些舊的使用Big5編碼的php程式,又沒有加入連資料庫時指定的編碼方式的相關code的話,那些程式就會爛掉,所以目前我是沒有加上那兩行。

接著建立空的資料庫準備把dump出來的資料import進去,SQL語法應該類似下面這樣,要加上DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

我是用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci

再來就是把剛剛dump出來後的sql檔在import進去了,這裡有兩點要注意的。
1.剛剛dump出來的sql檔如果原先是Big5里面會有一些像是許功蓋這些字後面會多了一個”\“,記得用文字編輯器把他消掉2.import進去時記得還要先修改一下dump出來的sql檔,在最前面加上

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

再來把每個資料表後面的

TYPE=MyISAM;

改成

ENGINE=MyISAM DEFAULT CHARSET=utf8;

都改好後就可以把他import進去了

#mysql -u帳號 -p 資料庫 < utf8.sql

不過以上實在有點麻煩,所以我把多餘的”/“消掉後,就直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可

順便記一下寫php時如是配合UTF-8的資料庫的話該注意,在真正送出query前要先加入以下三行

mysql_query(”SET NAMES ‘utf8‘”);
mysql_query(”SET CHARACTER_SET_CLIENT=utf8“);
mysql_query(”SET CHARACTER_SET_RESULTS=utf8“);

檢查語系的SQL語法

show variables like “%character%”;




  • 贊助網站       

    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!
    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務

  • 1 樓住戶:優妹
    發表時間:2007-02-14

    1.

    2.用 vi /etc/php.ini 設定php中的語系為 default_charset = "big5"

    3. 用 vi /etc/my.cnf 設定MySQL中的語系為
    [mysqld]
    init_connect='SET NAMES big5'
    default-character-set=big5
    [client]
    default-character-set = big5

    2 樓住戶:小乖
    發表時間:2007-02-14

    MySQL 使用 rpm 安裝後,修改 charset 設定的方法!
    先來談談沒有加 charset (預設字集) 會怎樣,主要是遇到中文字會有問題。

    1.使用 SQL 的 like 指令時,使用英文字母做搜尋,只要某個中文單字內碼跟搜尋的英文字母一樣,也會被 select 出來。(如「建」這個字,用英文字「x 」一樣找的到)

    2.就是常見的「許、功、蓋」等,內碼含 "\" 字元的中文字,全部都會造成寫入或讀取資料庫失敗。

    這時我們就必須指定 charset (預設字集)是 big5 了。但不是用 tarball 安裝 mysql 的話,自然不可能下 --with-charset=big5 了,所以必須做個小手術來讓 MySQL 知道我們的資料庫主要用的字集是 big5 。

    先到 /usr/share/mysql/ 依照你的記憶體需求來選一個 cnf 檔。(需要的記憶體配置在各檔檔頭都有)

    如果沒有特別需求,就直接用 my-medium.cnf 就可以了。然後放到 /etc 並改名為 my.cnf,指令如下:

    #cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

    再來就是修改 my.cnf

    #vi /etc/my.cnf

    找到以下內容
    [mysqld]
    port=3306
    socket=/usr/lib/mysql/mysql.sock
    default-character-set=big5 //自行加入這一即可,也就是設定預設字集為 big5

    存檔後只要重新啟動 MySQL 就可以了:
    #service mysql restart

    這樣就完成更改的動作了,而且資料庫中若有 UTF-8 字集的資料存取也都不會受影響,很方便吧! ^_^




     共 2 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容:
    其他選項: