2008年1月17日 星期四

心得 / 終於搞懂 MySQL 資料庫編碼

搞了好久終於明白了...
要把原本在windows上的資料轉到Linux上
原本使用phpMyAdmin裡面的資料庫備份轉出
轉到Linux上的MySQL
結果網頁中文卻出現一堆???

去google了一下
發現大家的情形大部分都是
資料庫亂碼(中文字部分出現???)、網頁正常
怎麼我的情況反過來變成是
資料庫正常、網頁亂碼(中文字部分出現???)
搞什麼東西.............
我還看到另一篇文章裡面提到
因為windows跟linux使用的斷行字元不一樣
所以轉換資料庫的過程會產生亂碼
雖然我懷疑這段話的正確性啦
但是我不知道原因也不能完全不相信
更讓我火大....阿不就不用玩了

想了一個晚上
後來我的解決方法不知道對不對啦
不過我的確成功了
分享給大家

如果有嘗試我的方法的
成功或失敗請發表一下評論
一起做個討論
謝謝囉

((以下均假設預轉換的資料庫名稱為 netroom ))

舊伺服器上

1. 先檢查資料庫的編碼

SQL 語法: SHOW CREATE DATABASE netroom;


2. 備份資料庫
這次我不用phpMyAdmin裡面的功能了,直接用mysqldump比較安心

mysqldump -u root -p --default-character-set=big5 netroom > netroom.sql

※如果在第一步驟編碼是latin1 那麼你在第二步驟也要用latin1導出資料喔 確保資料的一致性

接下來要動到新伺服器上了

1. 修改mysql設定檔

轉 big5 的人請參考

[mysqld]
character-set-server=big5
collation-server=big5_chinese_ci
init-connect='SET NAMES big5'

[client]
default-character-set=big5

轉 utf8 的請參考
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'

[client]
default-character-set=utf8

2.重新啟動MySQL

3.檢查 MySQL Server 的編碼

 SQL 指令:SHOW VARIABLES LIKE 'character\_set\_%'

如果轉utf8的會看到...


註:其中 filesystem 會是 binary,此為正常的現象。


轉big5的....囧了
無解


............................................



騙你的啦

振奮一下精神   我開個小玩笑....XD

轉big5的...


有utf8 又有 big5 是怎麼回事
因為我在安裝mysql的時候
把預設編碼改成utf8 所以會這樣
如果跟我有一樣的情形的人也不用擔心
以PHP為例 只要修改網頁中連接資料庫的地方
在後面加上
mysql_query("SET NAMES 'big5'");
mysql_query("SET CHARACTER SET big5");
mysql_query("SET CHARACTER_SET_RESULTS=big5'");

這樣就能達到前端、後端編碼的一致性

轉uft8 的也改一下 以防萬一

4. 建立新資料庫

CREATE DATABASE netroom;

5. 修改舊server轉出的 sql檔

這一個步驟我們要修改語系的相關部分
例如 SET NAMES latin1 改成 SET NAMES utf8
DEFAULT CHARSET=latin1 改成 DEFAULT CHARSET=utf8

big5 轉 big 5 的不用改
big5 轉 utf8 的請搜尋 big5 取代 成 utf8

latin1 轉 big5 的 請搜尋 latin1 取代成 big5
latin1 轉 utf8 請搜尋 latin1 取代成 utf8

6. 匯入新伺服器
mysql -u root -p example < example.sql

這樣就差不多了
搞這個真的是要人命

參考資料:

http://yblog.org/archive/index.php/5843
http://forum.slime.com.tw/thread208451.html

1 則留言:

  1. 這篇文章真的不錯唷
    習慣用PHPMYADMIN常常容易被搞死
    感謝你的這篇教學,不知道此篇是否能轉載,到我的部落格 @"@


    版主回覆:(07/08/2009 11:51:24 PM)

    歡迎轉載~~
    但請註明出處喔...謝謝^^

    回覆刪除

如何在 golang 裡面引用 gitlab private repo

參考文章:https://stackoverflow.com/questions/27500861/whats-the-proper-way-to-go-get-a-private-repository 原文是用 gitlab.company.com 當範例,這邊改成一般帳號...