| « Flash gallery component 測試一直有問題 | 列印紙張設定,改為A4、A3 » |
php 和 MySQL 4.1的問題
在phpmyadmin下看到的中文字亂碼的解決方法
取自:http://freesf.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=3739&forum=23&viewmode=flat&order=ASC&start=0
(繼續)
darkhero:
以下提供兩種做法:
1 若你的資料庫Server只有你一個人在用,只用到一種編碼資料庫.例如big5...
則可以直接在 my.cnf 中的 mysqld 區段設定 資料庫預設語系為 big5...
然後 mysql client 部份也設定一個 init_command 去預設每個 client 的編碼為big5
相關資料可以參考這篇.
http://blog.dragon2.net/archives/2005/08/08/194.php
2. 若是你的資料庫Server不一定只有 big5 的資料..
建議你 mysql Server 部份預設為 utf8 , 然後每個 client在連線完成的時候(也就是每個php程式完成 mysql_connect 後),執行一下 mysql_query("set names big5"); 或是你需要的編碼 像是 mysql_query("set names utf8");mysql_query("set names gb2312")等...
這樣mysql會自動幫你把client的 big5 資料傳到 server 的時候會轉成為 資料庫的編碼格式...
至於你用 兩個都是latin1 也是可以阿...這樣的情況只是client 跟 server之間不做任何轉碼的動作.
只是phpmyadmin 2.6.x後預設以 utf8 顯示資料...
所以會跑 set names utf8 ...如此一來...你的資料在在phpMyAdmin中就會被錯誤的重新解碼....因此就會有亂碼出現....
jrh:
1.在mysql_connect()之後mysql_query("set names big5");
『big5』,可改成您要存入資料庫的資料的編碼方式,也就是現在起您寫php時在做完連線資料庫之後,還要再指定您要寫入的資料的編碼方式!
2.建立一個資料庫時別忘了指定該資料庫的編碼方式(以下以big5為例),如下:
CREATE DATABASE `aaa` DEFAULT CHARACTER SET big5 COLLATE big5_chinese_ci;
若您是使用phpmyadmin幫您建立資料庫,別忘了校對請選『big5_chinese_ci』。
這樣一來phpmyadmin上看中文就不會出現亂碼了!
darkhero:
簡單的解釋一下為什麼你的需要在client 跟 server 都是 latin1_general_ci 的情況下才會正常..
當初資料進入資料庫的時候 database 的設定是 latin1_general_ci , client 也是 latin1_general_ci...資料內容是 utf8 .
所以 data = > mysql_client = > mysql _server = > >Database.
最後以 latin1_general_ci 的處理方式,存入了utf8 的資料.
所以你要用 latin1 的 clent + latin1 的 database server 才能反向這個流程...
將已經被 latin1 處理的 utf8 內容取出...
若是這時候.你用 phpMyAdmin 去改了資料庫編碼 latin1_general_ci = > big5_chinese_ci 的話, 資料內容會被資料庫Server進行 latin1_general_ci = > big5_chinese_ci 的處理......
這時候你就算用 big5_chinese_ci 的去取得資料庫的資料,得到的也只是 經過 latin1 + big5 兩到處理的資料..所以是亂碼!~...
正確的處理方式應該是會經過下列步驟:
mysqldump --default-character-set=latin1 --compatible=mysql40 mydatabase > mydatabase.sql
因為你的資料內容部份是utf8 所以..
mysql --default-character-set=utf8 mydatabase2 < mydatabase.sql
當然.這只是基本步驟.若是發生問題則需要視情況處理,例如欄位名稱用了保留字等問題...