作者 主題: [以解決]mysql+phpmyadmin(mysql中文變亂碼)  (閱讀 6733 次)

0 會員 與 1 訪客 正在閱讀本文。

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
各位學長姊們:

這個問題很神, 因為再怎麼修改, 我的mysql還是出現亂碼
原由:

我分別在liunx 跟 windows server上, 裝了一個叫web2project(免費專案軟體)的東西
輸入中文字後,在網頁上,是正確的中文字,但mysql裡出現的, 都是亂碼

Linux:
linux (centos5.4) + mysql (server/client version 5.0.77) + phpmyadmin 3.3.4
Windows:
WampServer +mysql(server version 5.1.36, client 5.0.5)+ phpmyadmin 3.2.0

所有的character都設定為 UTF-8 Unicode
我在mysql.cnf裡, 修改了

[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
init_connect='SET NAMES utf8'

該改的, 我想我都改了(但一定是哪裡出問題)
mySql charset: UTF-8 Unicode
mysql connection collation utf8_general_ci

但!! Windows裡的mysql就很成功的把中文變正常
但 linux裡的mysql就沒辦法, 中文一直是亂碼

有文章說, php.ini也要改, 我也試過
有人說, 也許是Web2project這套軟體的問題, 但如果這套有問題, 在windows裡的web2project, 也不應該可以讀的到中文

所以想請問一下, 是否哪裡需要在做設定?
謝謝


註:
剛剛再另一個論壇發現
""若主機商設定有問題,也只是會讓網頁顯示utf8正常,但在phpMyadmin看到亂碼。""
我現在就是這種情況, 網頁正常, 但phpmyadmin看到是亂碼

補充:
我用SHOW VARIABLES LIKE 'character\_set\_%'
這個指令去看我linux裡mysql的設定, 都是utf8

Variable_name    Value
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8
character_set_filesystem    binary
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
« 上次編輯: 2010-09-29 15:15 由 kb1024 »
計劃永遠趕不上變化, 不計畫也不知道什麼是變化

rainday

  • 鑽研的研究生
  • *****
  • 文章數: 738
  • 性別: 男
  • enhancing and optimizing
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #1 於: 2010-09-27 14:00 »
請問你用什麼去看linux上的mysql ? putty? terminal?
<0  =_=  Don't learn to hack , hack to learn.

keyword

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #2 於: 2010-09-27 16:04 »
註:
剛剛再另一個論壇發現
""若主機商設定有問題,也只是會讓網頁顯示utf8正常,但在phpMyadmin看到亂碼。""
我現在就是這種情況, 網頁正常, 但phpmyadmin看到是亂碼
[/quote]

將 phpmyadmin 的 MySQL 連線校對 設定為 utf8_general_ci 何如?

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #3 於: 2010-09-27 16:49 »
用phpmyadmin去看mysql

都校正為"utf8_general_ci"了
還是亂碼
計劃永遠趕不上變化, 不計畫也不知道什麼是變化

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #4 於: 2010-09-27 19:57 »
請問你用什麼去看linux上的mysql ? putty? terminal?

用phpmyadmin
也用 terminal 去看過

裡面的資料是亂碼
計劃永遠趕不上變化, 不計畫也不知道什麼是變化

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #5 於: 2010-09-27 20:03 »
請問你用什麼去看linux上的mysql ? putty? terminal?

用phpmyadmin
也用 terminal 去看過

裡面的資料是亂碼

也許存進去的資料不是 utf-8 編碼  :D
調整 phpmyadmin, terminal 用其他編碼
或是將資料庫 dump 出來用文字編輯器
或瀏覽器開啟, 看是否能正常顯示

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #6 於: 2010-09-28 17:44 »
也許存進去的資料不是 utf-8 編碼
有可能喔! 但我不知道怎麼去改

我把資料dump出來, 用其他方式開, 都還是亂碼
所以輸入時, 就已經有問題!

所以請問~ 我應該去哪裡做修改?
計劃永遠趕不上變化, 不計畫也不知道什麼是變化

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #7 於: 2010-09-28 20:06 »
先確認一下 web2project 使用的編碼

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #8 於: 2010-09-29 09:00 »
function db_connect($host = 'localhost', $dbname, $user = 'root', $passwd = '', $persist = false) {
   global $db, $ADODB_FETCH_MODE;

   switch (strtolower(trim(w2PgetConfig('dbtype')))) {
      case 'oci8':
      case 'oracle':
         if ($persist) {
            $db->PConnect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         } else {
            $db->Connect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         }
         if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE', 0);
         break;
      default:
      //mySQL
         if ($persist) {
            $db->PConnect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         } else {
            $db->Connect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         }
   }

   $ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
}


這是web2project的connection code, 之前有看過一些建議說

另外也可以用一個獨立的檔案來處理 mysql connection的設定,例如:
PHP:
< ?
//database connection details.
$host = "localhost";
$link = mysql_connect($host, "xxx", "xxx");
mysql_query("SET NAMES 'Big5'");
mysql_select_db("your_table_name_here", $link);
?>


但我就不知道應該怎麼加在這裡
計劃永遠趕不上變化, 不計畫也不知道什麼是變化

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #9 於: 2010-09-29 10:15 »
另外也可以用一個獨立的檔案來處理 mysql connection的設定,例如:
PHP:
< ?
//database connection details.
$host = "localhost";
$link = mysql_connect($host, "xxx", "xxx");
mysql_query("SET NAMES 'Big5'");
mysql_select_db("your_table_name_here", $link);
?>


但我就不知道應該怎麼加在這裡

這裡不是已經告訴你, 他用的不是 utf-8, 是大五碼呀!!

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #10 於: 2010-09-29 10:22 »
喔~ 我不是這個意思啦~
我給的例子是有人寫個獨立的檔案來處理 mysql connection的設定
那個例子是用big5 沒錯, 所以同理, 也可以用utf8

但web2project已經有自己的獨立檔案跑mysql connection
(function db_connect那個檔案)
所以我想請問, 有誰知道怎麼把
mysql_query("SET NAMES 'Big5'"); OR
mysql_query("SET NAMES 'utf8'");

加到function db_connect裡
計劃永遠趕不上變化, 不計畫也不知道什麼是變化

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #11 於: 2010-09-29 10:38 »
喔~ 我不是這個意思啦~
我給的例子是有人寫個獨立的檔案來處理 mysql connection的設定
那個例子是用big5 沒錯, 所以同理, 也可以用utf8

但web2project已經有自己的獨立檔案跑mysql connection
(function db_connect那個檔案)
所以我想請問, 有誰知道怎麼把
mysql_query("SET NAMES 'Big5'"); OR
mysql_query("SET NAMES 'utf8'");

加到function db_connect裡

嗯, 就加在連線之後嘍, mysql 是在 default 區, 那就加在 default 區的最後一行

kb1024

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 女
    • 檢視個人資料
[以解決]mysql+phpmyadmin(mysql中文變亂碼)
« 回覆 #12 於: 2010-09-29 15:15 »
嗯! 我生氣了~ 原來就一句小小的code就把我這麼多天來的問題給解決了

function db_connect($host = 'localhost', $dbname, $user = 'root', $passwd = '', $persist = false) {
   global $db, $ADODB_FETCH_MODE;

   switch (strtolower(trim(w2PgetConfig('dbtype')))) {
      case 'oci8':
      case 'oracle':
         if ($persist) {
            $db->PConnect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         } else {
            $db->Connect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         }
         if (!defined('ADODB_ASSOC_CASE')) define('ADODB_ASSOC_CASE', 0);
         break;
      default:
      //mySQL
         if ($persist) {
            $db->PConnect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         } else {
            $db->Connect($host, $user, $passwd, $dbname) or die('FATAL ERROR: Connection to database server failed');
         }
            mysql_query("SET NAMES 'utf8'");
   }

   $ADODB_FETCH_MODE = ADODB_FETCH_BOTH;
}


謝謝各位~


ps. 若有人跟我一樣, 改了etc/my.cnf檔都沒用的話
一定要去找你要安裝的軟體的connection檔
像wordpress
有很多人提到 (以下引用http://ria.richtechmedia.com/2005/07/27/wordpress-15%E5%8D%87%E7%B4%9A%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-%E4%B8%AD%E6%96%87%E4%BA%82%E7%A2%BC%E7%AF%87/)
"mysql的語系設定是多層次的,前面我們把database與table的語系都設定正確,但程式與mysql連線時的語系則是由 connection 來決定,這部份就要改wordpress的程式碼,在 \wp-includes\wp-db.php 的第 44行加上:
$this->query(“SET NAMES ‘utf8′”);"
像我的web2project
是在includes/db_adodb.php裡面

不過萬一對那個軟體的程式碼不熟的人, 就比較麻煩了


我的情況很特殊, 因為web2project裝在windows底下, 就不用改到connection檔案去
但在linux底下, 就全部都要改 從etc/my.cnf 改到connection檔去~
« 上次編輯: 2010-09-30 09:45 由 kb1024 »
計劃永遠趕不上變化, 不計畫也不知道什麼是變化