專做系統家具、系統櫃
客製化流暢舒適居家,免費估價規劃
拆除全系列活動百葉窗.防火安全門.氣密隔音窗
堅固耐用.工廠直營.歡迎洽詢

首頁  •  j2h 論壇 • 軟體討論     • 

[Mysql] 資料庫備份[big5]utf8轉換成utf-8

房東:張經理
發表時間:2015-08-08


其實在很多opensource底下的套裝軟體,資料庫預設都是用 utf8,我想這會造成在 phpMyAdmin 底下看到亂碼,然後自己之前也有遇到問題,然後又在網路上看到這篇 搶救 xdite.net 所用的奇技淫巧 裡面所寫的備份方式跟我在轉換 phpBB2 跟自己的 wordpress 一樣 大同小異,我還在想說有更好的解法說,看來是沒有,在 wordpress 底下,只能利用後台的資料庫備份,不然用phpMyAdmin的話,我想你備份出來也是沒用。 其實解法很容易,在 搶救 xdite.net 所用的奇技淫巧 裡面有提到一篇大陸的解法:搞定亂碼,搬家到 Dreamhost 其實內容大概就跟我第一段寫的差不多,如果有提供ssh的虛擬主機的話,還可以利用ssh mysqldump 的方式來備份 備份步驟如下




  1. 利用 wordpress 後台管理介面備份database,如果不利用後台的話,用phpmyadmin的話,會在成亂碼喔 不然就是ssh連線到主機上面,下指令 mysqldump -h mydomain -u root -p –default-character-set=utf8 database > database.sql

  2. 在phpMyadmin中設定MySQL 字符集: UTF-8 Unicode (utf8)

  3. phpMyadmin中設定MySQL 連線校對 選 utf8_general_ci

  4. 修改剛剛備份好的 sql 檔案,用編輯器打開 查找”DEFAULT CHARSET=utf8″ 用”DEFAULT CHARSET=utf8″替换

  5. 然後在重新利用phpmyadmin把檔案匯入到新建立的資料庫,或者是下指令 mysql -u root -p new_database < database.sql

  6. 修改 wordpress 程式碼,修改wp-includes/wp-db.php內,找到 $this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword); //後面加入 $this->query(“SET NAMES ‘utf8′” );



上面的方法適用於再任何套裝軟體,我在 phpBB2 的big5轉換成utf-8的時候,也是用這種方法,給大家參考看看





  • 贊助網站       

    DRAPERY窗簾設計
    捲簾、窗簾布、窗簾布多種款式,免費丈量,挑戰市場超低價,為家輕鬆增添新意
    優潔清潔公司
    夏季清潔讓您煥然一新,專業清潔團隊,寶貝家具不受損,輕鬆擁有乾淨居家,守護您的健康環境
    TECHNIQUE冷氣空調規劃
    冷氣界的達人,多重售後服務保障,專業熱忱技術,多戶家庭一致推薦

  • 1 樓住戶:張經理
    發表時間:2015-08-08


    1. 利用文字模式mysql備份database

    mysqldump -h mydomain -u root -p –default-character-set=latin1 database > database.sql


     


    2. 在phpMyadmin中設定MySQL 字符集:

    UTF-8 Unicode (utf8)


     


    3. phpMyadmin中設定MySQL 連線校對utf8_general_ci


     


    4. 修改剛剛備份好的 sql 檔案,用編輯器打開



    尋找”DEFAULT CHARSET=latin1″ 用”DEFAULT CHARSET=utf8″替代


     


    5. 用ConvertZ將sql檔,從big5轉成utf8


     


    6.然後在用phpMyAdmin把檔案匯入到新建立的資料庫,或者是下指令

    mysql -u root -p new_database < database.sql


     


    7. 修改 php 程式碼

    $this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);

    //後面加入

    $this->query(”SET NAMES ‘utf8′” );



    2 樓住戶:kkk
    發表時間:2015-08-08

    MySQL Big5 轉 utf8

    ◎ PHP 與 MySQL 建立連線:
    所以為了解決亂碼問題,在PHP 與 MySQL 建立連線時,於 query 之前先執行:

    mysql_query("SET CHARACTER_SET_CLIENT=utf8");
    mysql_query("SET CHARACTER_SET_CONNECTION=utf8");
    mysql_query("SET CHARACTER_SET_RESULTS=utf8");

    如上三列編碼都一樣時,可直接執行下列

    mysql_query("SET NAMES utf8");

    ◎ MySQL資料庫big5轉utf8:

    Step1:首先把資料dump出來

    由於先前資料是存成latin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上-default-character-set=latin1

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

    Step2:big5轉成utf8

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

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

    如果原先是UTF-8的資料,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

    Step3:修改sql檔

    1、修改轉成的sql檔中所產生的‘’\”及換行的問題(有時換行時會成‘\n’)

    2、在dump出來的sql檔最前面加上:
    SET NAMES utf8;
    SET CHARACTER_SET_CLIENT=utf8;
    SET CHARACTER_SET_RESULTS=utf8;

    :1,$s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/g
    :1,$s/latin1/utf8/gc
    :1,$s/許\\/許/g
    :1,$s/功\\/功/g
    :1,$s/蓋\\/蓋/g
    :1,$s/餐\\/餐/g
    :1,$s/愧\\/愧/g
    :1,$s/擺\\/擺/g
    :1,$s/穀\\/穀/g
    :1,$s/淚\\/淚/g
    :1,$s/豹\\/豹/g
    :1,$s/珮\\/珮/g
    :1,$s/俞\\/俞/g


    再來把每個資料表後面的TYPE=MyISAM是否有DEFAULT CHARSET=latin1;
    若沒有請改為ENGINE=MyISAM DEFAULT CHARSET=utf8;

    Step4:建立新的資料庫

    方法1. SQL語法
    CREATE DATABASE `資料庫` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

    方法2. 用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci

    步驟五:import資料

    方法1. SQL語法

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

    方法2. 直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可。不過使用phpMyAdmin import 有檔案大小的限制,可先把sql檔分成幾個檔案。

    ◎ 最後記得檢查看MySQL的my.cnf設定檔內要加入以下設定
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    default-character-set=utf8
    default-collation=utf8_general_ci

    3 樓住戶:gt
    發表時間:2015-08-08

    MySQL 4.0是以big5編碼,許多big5沒有的字就難以呈現,雖然在4.1之後版本有支援utf8編碼,但是如何將4.0資料庫內以big5編碼的資料正確轉到最新版MySQL 5.1以utf8編碼,就得花些功夫。

    1.備份資料庫:

    C:\mysql\bin>mysqldump -u root -pYourPassword --default-character-set=latin1 --add-drop-table YourDbName > db_latin1.sql



    2.轉換編碼:

    (1).首先,你必需先準備EmEditor,然後用它開啟你4.0的db_latin1.sql檔

    (2).在最前面加入以下三行。

    SET NAMES utf8;

    SET CHARACTER_SET_CLIENT=utf8;

    SET CHARACTER_SET_RESULTS=utf8;

    為了確保新的MySQL5.1資料庫資料表為utf8編碼,必須變更原來db_latin1.sql內容中CREATE TABLE的編碼字串,

    以編輯器搜尋取代方式找「);」改成「) ENGINE=MyISAM DEFAULT CHARSET=utf8;」

    為了解決big5中的「許功蓋餐…」等字元在T-SQL插入字元的欄位後方,造成欄位對應不正確,必須統一取代:

    將文字內容「?,'」以「','」取代
    將文字內容 「\',」以「',」取代
    (3).選另存新檔->類型不用改,編碼選utf8,加入BOM那邊不要勾選,換行方式選 僅有 LF(UNIX)->存檔newdb.sql

    (或者使用convertz將big5編碼檔,轉成utf8編碼格式)



    3.設定MySQL確認資料庫編碼為utf8

    修改my.ini,在client區段加入default-character-set=utf8,如下

    [client]

    default-character-set=utf8

    [mysql]

    default-character-set = utf8



    4.倒回資料:

    (1). 新增資料庫

    mysql> create database newdb

    -> \g

    mysql> use newdb (確認新資料庫建立無誤)

    (2). 執行mysql匯入資料

    C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -u root –p YourPassword newdb < d:\mysql\newdb.sql

    4 樓住戶:dddd
    發表時間:2015-08-08

    http://cym6112.blogspot.tw/2012/01/mysql-big5-to-utf8.html

    昨天要幫老婆大人把客戶從MySQL dump出來的資料,從原先的Big5轉成UTF8再塞進去MySQL裡。原始檔案有將近900M,有點大所以大部份的編輯軟體都拿他沒輒,所以就開到 Linux裡用iconv直接轉,轉是轉完了但是總會有"\?"的問題造成匯入不成功,去問了一下G大這有可能是換行字元的問題,為了快速找到解決方案就 先把問題的研究先放著,解決問題優先。


    [Navicat]是一套資料庫管理工具支援多種資料庫,可下載試用。它本身提供Data Transfer的功能可以直接讓線上的資料庫轉到另一個資料庫或輸出成檔案。轉換細節如下:

     


    環境:Server: VMwarePlayer3.1.5 + Debian6.0.3 + MySQL 5.1.49

              Client: WinXP with SP3 + Navicat10





    1. 在Navicat環境下,建立兩個Connections,一個Encoding設成950 (ANSI/OEM - Traditional Chinese Big5),另一個設成65001 (UTF-8)




    2. 點選 Tools -> Data Transfer -> General,設定Source Connection為Big5的那個,當然Target Connection就得設成UTF8的那個了,Database依需求設定




    3. 在Data Transfer畫面下點選Advanced,依照你的需求增減相關的選項,在本例中我將Include character set及Use hexadecimal format for BLOB取消。Include character set如果設定會把目的table也設成Source table的character設定,所以取消;至於Use hexadecimal format for BLOB則是因為我的資料庫有使用到BLOB的欄位,轉換時會造成錯誤,所以取消。




    4. 接著就按Start等待結果啦~



    5 樓住戶:fff
    發表時間:2015-08-08

    http://phpbb-tw.net/phpbb/viewtopic.php?f=2&t=48420

    其實也只是很意外的插曲,本來想弄phpMyAdmin的HTTP認證功能,中間把說明文件的意思看反了,以為要把MYSQL升級到4.1.2版以後才能用,後面才發現那是對4.1.2以前版本設定用的。

    所以就傻傻的把MySQL4.1.13移除,然後重裝成4.1.22版。

    而論壇原先是Big5碼的,MySQL也是Big5校對,而4.1.22我讓他的校對用成UTF8,所以就發生所謂的亂碼狀況,不過後來還是找到辦法解決了。



    需求環境

    1.自己架設的資料庫系統

    為何需要自己架設的資料庫系統?因為這牽扯到資料庫引擎的連線校對用設定,一般免費資料庫你沒辦法處理。

    2.Convert

    這是把Big5碼的Lang_main.php轉換成utf8用的,當然你也可以直接抓utf8版的phpBB。

    3.Big碼的phpBB論壇,沒有額外安裝的MOD,且有文章跟版面等。

    4.phpMyAdmin

    非必要,因為也能用MySQL的clinet下SQL指令處理,不過比較建議用phpMyAdmin,會比較快且方便,稍後只介紹用phpMyAdmin的部分



    過程

    1.先找出MySQL的MSI檔,不然無法正常移除。

    例如我是4.1.ㄳ 你就要把4.1.13的MSI檔找出來,然後用新增/移除程式方式移除他。

    2.安裝新版MYSQL,安裝完成後會要你設定,這時請選用Detailed Configuration,這裡才能設定你的語系。在語系選Multi部分,他的圖樣會秀日本語也就是中間選項,剩下的都看你個人想法設定。

    安裝完畢後MySQL應該可以正常動作了。



    4.論壇相關

    4.1 phpMyAdmin部分

    4.1.1 進入phpMyAdmin的時候,有個mysql系統變數,點下去看後,在

    而欄位collation connection,collation database,collation server三個都要是utf8_general_ci,這會影響到phpMyAdmin一開始畫面右邊mysql連線校對。如果三個欄位都不是utf8_general_ci,請自行參考MySQL文件將之變更。

    圖檔

    圖檔

    4.1.2 進入phpBB的資料庫,上方的工具列會變更,其中有一個是管理,進入管理畫面後,將下面的校對改成utf8_general_ci

    圖檔

    圖檔

    4.1.3回到資料庫頁面,在第一個資料表選結構,進去後一樣選管理,把校對也換成UTF8_geneeal_ci,這時候旁邊有個執行,點選他會出現一段SQL語法,把SQL語法複製下來,進入SQL語法頁面,對其他資料表都進行相同的動作,這樣資料庫的部分就OK了。

    圖檔

    圖檔

    圖檔

    圖檔

    圖檔



    4.2 請用Converter將languages的語系檔都轉換成utf8或直接用utf8版的取代。

    5.連上論壇查看結果



    希望大家都能順利轉換成utf8。



    6 樓住戶:2333
    發表時間:2015-08-08

    [分享]mysql與phpMyAdmin顯示或儲存utf-8問題集
    mysql big5 轉 utf-8 速記
    當網站改版時,要把以往mysql的big5資料轉換成utf-8時,常常會是個頭痛的問題。

    要轉換,你的新舊資料庫都有phpmyadmin的介面,另外還得有big5->utf-8的工具,在windows上中文轉換工具首選為 ConvertZ ,在linux上得轉碼工具為iconv。

    [全文:]

    首先,檢查看看phpmyadmin在輸出csv檔案時會不會有問題。
    stripslash為把字串去掉反斜線的函式,但是在處理big5碼的時候便會碰到難題,他會將big5的斜線去掉,以至於轉出來的文字變成亂碼。新版的phpmyadmin已經沒有這個問題,但是要看看舊版有沒有在轉出的時候加上這個函式,得把他去掉
    編輯 phpmyadmin/libraries/export/csv.php


    function PMA_exportData
    裡頭,找到while迴圈,並找找看有沒有stripslash的function:

    while ($row = PMA_DBI_fetch_row($result))
    .....
    $row[$j] = stripslashes($row[$j]);

    把function拿掉,留下

    $row[$j];
    就好。
    第二,輸出csv資料。到phpmyadmin的輸出頁面,針對舊資料庫一次一個表格輸出。調成csv匯出,存檔。

    第三,匯出資料庫的結構schema。到phpmyadmin的輸出介面,針對全部的表格,調成SQL輸出,並且不要包含資料,下載回來的是單純的sql結構檔。

    第四,打開convertz,對剛剛轉下來的csv轉換成utf8的動作。

    第五,到新資料庫,先把剛剛.sql的結構給匯入,建立好空的table格式。如果在mysql4.1以後,如果有預設連線校對,匯入的表格統統都會用該連線校對設定。

    第六,一個一個資料表,匯入剛剛存下的csv檔。

    最後,檢查看看新資料庫有沒有亂碼。

    這應該是個笨方法,不過目前沒有出現中文轉換的問題。如果一直試不成功,不妨也可以試看看這個笨方法。



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

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