專業設計師團隊,賦予空間新美感
裝潢設計搭配量身訂做系統家具
壁紙跳蚤防治專業團隊服務,消滅跳蚤蟲卵蛹
徹底消滅跳蚤,免費諮詢服務

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

[php] mysql升級及編碼

房東:達人
發表時間:2011-03-17
[檢舉]



【指令】


匯出 mysqldump















匯出整個資料庫 mysqldump -u[username] --password=[password] [db_name] > [file_name]

例:mysqldump -uroot --password=1234 test_db > test_db.sql
匯出某個資料表 mysqldump -u[username] --password=[password] [db_name] [table_name] > [file_name]

例:mysqldump -uroot --password=1234 test_db test_table > test_db.sql
以某種編碼匯出 mysqldump --default-character-set=latin1 -u[username] --password=[password] [db_name] > [file_name]

例:mysqldump --default-character-set=latin1 -uroot --password=1234 test_db > test_db.sql


顯示mysql資訊SHOW語法(在shell下可使用mysqlshow)











顯示MySql設定資訊 mysql語法:show variables;

php語法:mysql_query(”show variables”);

mysql語法:show variables like \'%big5%\';

php語法:mysql_query(”show variables like \'%big5%\'”);

shell>mysqladmin variables
顯示編碼 mysql語法:SHOW CHARACTER SET;

php語法:mysql_query(”SHOW CHARACTER SET”);

mysql語法:SHOW CHARACTER SET like \'utf8\';

php語法:mysql_query(”SHOW CHARACTER SET like \'utf8\'”);


 


【亂碼問題】



  1. 未指定編碼方式時,MySQL的預設編碼是「latin1」。

  2. 由舊版MySQL升級至4.1版時,若mysqldump出來的資料是亂碼,需指定編碼是「latin1」。例:mysqldump --default-character-set=latin1 -uroot --password=1234 test_db > test_db.sql

  3. 資料dump出來以後,用DW開啟,如果是看到亂碼,改一下頁面屬性裡面的編碼方式看看。


【MySQL 升級到 4.1】



  1. 升級前要先把資料dump出來,升級後再import進去。

  2. 資料dump出來時要加上 「--default-character-set=latin1」,參考【亂碼問題】

  3. dump出來的資料要先轉成正確的編碼,因為原先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



  4. 修改 my.cnf 或 my.ini 的編碼設定,參考【MySQL 4.1.x 記得要加在 my.cnf 的東西】

  5. 資料import進去之前,mysql4.1的資料庫要設定好每一個database與table的編碼方式,sql檔最前面要加上 「set NAMES=utf8;」。

  6. 建立資料庫時,確定要加入這個選項

    DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

    應該會是這樣的語法

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


    資料表的屬性也要確定為 COLLATE utf8_general_ci

    不過直接新增資料表,為跟著資料庫的設定一起,便可以不用加上屬性



  7. 建立資料表時,確定要加入這個選項

    DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

    應該會是這樣的語法

    create table art_activity(

         id int unsigned not null auto_increment primary key, /* PK 資料序號 */

         subject tinytext not null, /* 標題名稱 */

         keyin_date datetime /* 資料建檔日期時間 */

    ) DEFAULT CHARSET=big5 COLLATE big5_chinese_ci;

  8. 剛剛dump出來的sql檔如果原先是Big5里面會有一些像是許\功\蓋\這些字後面會多了一個”\\“,記得用文字編輯器把他消掉

    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



  9. 資料匯入時也可以下語法

    mysql  -uname  -ppassword  -Ddbname  --default-character-set=utf8  <  XXX.sql


  10. 當資料表都是 utf8 格式後. 你的 php 程式還是跑 big5 阿...這時候該怎麼辦呢?...



    只要在連線資料庫後立刻執行下面的SQL語法,設定 client charset ....

    SET NAMES big5;

    SET CHARACTER_SET_CLIENT=big5;

    SET CHARACTER_SET_RESULTS=big5;



    這樣取出跟存入的資料就會自動轉碼...


  11. PHP程式連線mysql在開啟資料庫時要加上

    $charset = mysql_query("SET NAMES big5;");

    $charset = mysql_query("SET CHARACTER_SET_CLIENT=big5;");

    $charset = mysql_query("SET CHARACTER_SET_RESULTS=big5;");

    參考


【MySQL 4.1.x 記得要加在 my.cnf 的東西】


[client]

default-character-set=utf8


[mysqld]

init_connect=‘SET NAMES utf8′

default-character-set=utf8

default-collation=utf8_general_ci


[mysqldump]

default-character-set=utf8


[mysql]

default-character-set=utf8 






  • 贊助網站       

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



  •  共 0 人回應

    姓名:
    佈告內容: