作者 主題: Linux環境的Mysql語系問題(PHP讀或寫)  (閱讀 3626 次)

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

yokunandu

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
Linux環境的Mysql語系問題(PHP讀或寫)
« 於: 2013-12-10 13:21 »
我知道這問題很多人問,
我上網查了後,好不容易將my.cnf和httpd都改成utf-8的編碼了(mysqld或client等等),
結果我的mysql資料庫原本的中文內容卻變成亂碼......
像'測試'兩個字變成:
 æ¸¬è©¦
還有讀出結果是:
\u6e2c\u8a66

原本都是latin1時,資料庫還可以存取中文資料。
改成utf-8後反而變成亂碼了......
我是用指令視窗沒有用phpMyAdmin,
用insert into中文資料就變成??
用了\s也都是顯示utf-8的設定結果
在PHP端加了header('conten-type:text/html;charset=utf-8');
結果是在全設為UTF-8時可以讀取正常(然而資料庫裡的內容是亂碼)
用了mysql_query("SET NAMES 'utf8'");則是亂碼。

我測試後大概是這樣:

原本的(預設Latin):
用header('conten-type:text/html;charset=utf-8');
是亂碼(這可想而知)
用mysql_query("SET NAMES 'utf8'");
也是亂碼
在資料庫中:中文操作都ok

全改成utf-8後
用header('conten-type:text/html;charset=utf-8');
可以讀取
用mysql_query("SET NAMES 'utf8'");
是亂碼
在資料庫中:中文操作皆無法

server 是 Linux的環境,
操作是用指令(用puTTy)

麻煩大家幫我查看問題到底出在哪裡了,

謝謝大家!
.(\ /)
(O.o)
(> <)

This is Bunny. Copy Bunny into your signature to help him on his way to world domination.

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Linux環境的Mysql語系問題(PHP讀或寫)
« 回覆 #1 於: 2013-12-10 14:20 »
我知道這問題很多人問,
我上網查了後,好不容易將my.cnf和httpd都改成utf-8的編碼了(mysqld或client等等),
結果我的mysql資料庫原本的中文內容卻變成亂碼......
像'測試'兩個字變成:
 æ¸¬è©¦
還有讀出結果是:
\u6e2c\u8a66

原本都是latin1時,資料庫還可以存取中文資料。
改成utf-8後反而變成亂碼了......
我是用指令視窗沒有用phpMyAdmin,
用insert into中文資料就變成??
用了\s也都是顯示utf-8的設定結果
在PHP端加了header('conten-type:text/html;charset=utf-8');
結果是在全設為UTF-8時可以讀取正常(然而資料庫裡的內容是亂碼)
用了mysql_query("SET NAMES 'utf8'");則是亂碼。

我測試後大概是這樣:

原本的(預設Latin):
用header('conten-type:text/html;charset=utf-8');
是亂碼(這可想而知)
用mysql_query("SET NAMES 'utf8'");
也是亂碼
在資料庫中:中文操作都ok

全改成utf-8後
用header('conten-type:text/html;charset=utf-8');
可以讀取
用mysql_query("SET NAMES 'utf8'");
是亂碼
在資料庫中:中文操作皆無法

server 是 Linux的環境,
操作是用指令(用puTTy)

麻煩大家幫我查看問題到底出在哪裡了,

謝謝大家!

原來資料庫裡的資料不是 utf8,用 utf8 去讀所以會是亂碼
解決方式可以先將資料 dump 出來轉成 utf8 後再灌回去
或是讀出資料後在 php 轉成 utf8 編碼

yokunandu

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
Re: Linux環境的Mysql語系問題(PHP讀或寫)
« 回覆 #2 於: 2013-12-10 14:43 »
所以server文件其實不用修改囉?
光是文件的修改就找了很多方法......

原本沒修改文件成utf-8前,
在puTTy看資料是顯示正常的(顯示中文)。
如果預設都是latin1,
那是什麼原因可以看到中文的部分呢?(只是因為語系統一的關係嗎)

先謝謝您提供的建議喔~
.(\ /)
(O.o)
(> <)

This is Bunny. Copy Bunny into your signature to help him on his way to world domination.

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Linux環境的Mysql語系問題(PHP讀或寫)
« 回覆 #3 於: 2013-12-11 13:01 »
所以server文件其實不用修改囉?
光是文件的修改就找了很多方法......

既然全部都要改用 utf8
如果不想以後碰到什麼麻煩事
建議還是直接將資料整個轉成 utf8  :D