作者 主題: 分享MySQL和php採用UTF8的詳細方法  (閱讀 106013 次)

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

yes298

  • 活潑的大學生
  • ***
  • 文章數: 380
    • 檢視個人資料
分享MySQL和php採用UTF8的詳細方法
« 於: 2006-01-12 16:18 »
小弟幾天來給MySQL和php全面採用UTF8搞得
頭昏腦脹, 現在總算搞清楚了, 成功轉換為UTF8.
例如: 許 功 蓋 碁 銹 裏 墻 恒 粧 嫺
這些字已完全問題了.

現總結一下給大伙參考. [如需轉載,請注明出處]

******   網 站 全 面 採 用 UTF-8 方法.   ******  

1. 用 vi /etc/httpd/conf/httpd.conf 設定Apache中的語系為:( (記得restart)
         AddDefaultCharset UTF-8

2. 用 vi /etc/php.ini 設定php中的語系為:( (記得restart)
         default_charset = "utf-8"

3. 用 vi /etc/my.cnf 設定MySQL中的語系為:( (記得restart)
      [mysqld]
         init_connect='SET NAMES utf8'
         default-character-set=utf8
      [client]
         default-character-set = utf8

4. 建立資料庫時選擇語系: (記得清除DB Cache)
      DROP DATABASE IF EXISTS `aa`;
      CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      USE `aa`;
      
      CREATE TABLE  IF NOT EXISTS `aat` (
        `id` char(1) NOT NULL default '1',
        `myStr` varchar(200) default NULL,
        PRIMARY KEY  (`id`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

5. 用UltraEdit(v11.20a版) 轉換所有ANSI格式的php檔案轉化為UTF-8格式:
      File --> Conversions --> ASCII to UTF-8 (Unicoding Editing)
   ( 在UltraEdit中按Advanced --> configuration --> File Handling
     --> Unicode/UTF-8 Detection --> 剔選Auto detect utf-8 files )
    如有需要時,可執行Remove BOM.php. 當用WinXP的Notepad將php檔由ANSI轉為UTF-8時,
  因檔頭有BOM,會引起排版問題,故必須移除,執行Remove BOM.php即可自動移除.
  Remove BOM.php可由以下網址下載:
  http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=13&author=hoyo&status=view
 
6. 在php檔中必須加入:
      <html><head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      </head><body>      

7. 在連接DB的檔中必須加入3行mysql_query才ok:
         $host="localhost";         $DBname="aa";
         $user= "root";         $passwd  = "";    
         $link = mysql_connect($host,$user,$passwd) or die ("Fail");
         $db = mysql_select_db($DBname, $link) or die ("Fail");               
     // 要在真正query DB取出資料前,加入以下3行
         mysql_query("SET NAMES 'utf8'");
         mysql_query("SET CHARACTER_SET_CLIENT=utf8");
         mysql_query("SET CHARACTER_SET_RESULTS=utf8");
         $sql  = "select * from aat where crid='1'";
         $rows = mysql_query($sql);

8. 在php檔中, 如有需要須注意: [Optional]
      運用htmlentities和htmlspecialchars時,要似如下:
         $chars = htmlentities($chars,ENT_QUOTES,"UTF-8");
         $chars = htmlspecialchars($chars,ENT_QUOTES,"UTF-8");
      並且在顯示前要用
         $chars = html_entity_decode($chars,ENT_QUOTES,"UTF8");
      如有用過addslashes()或mysql_real_escape_string()記得用以下:
         $chars = stripslashes($chars);
      如有需要可以用以下function將不同編碼轉換:
         $chars = iconv('Big5','UTF-8',$chars);  //由Big5轉為UTF-8

mega

  • 可愛的小學生
  • *
  • 文章數: 7
    • 檢視個人資料
分享MySQL和php採用UTF8的詳細方法
« 回覆 #1 於: 2006-05-01 18:17 »
寫得真是好!!! 不推薦對不起良心啊!!!
color=#009999]
Are you kidding?  (你是凱蒂嗎?)
No, I am serious. (不,我是喜瑞兒)
[/color]

rubcandy0208

  • 懷疑的國中生
  • **
  • 文章數: 33
    • 檢視個人資料
分享MySQL和php採用UTF8的詳細方法
« 回覆 #2 於: 2006-07-05 13:44 »
太強了,之前資料庫被我改得網頁秀不出資料來,明明以phpmyadmin看有資料,也可以加資料,但是網頁寫不進也秀不出,一定是這樣的問題,回家馬上改一改

梁晉魁

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
使用心得分享
« 回覆 #3 於: 2006-10-20 18:09 »
參閱本文章所寫的步驟,我的處理結果為:

1.所使用的檔案需為uft-8格式;

2.在meta需設定;
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

3.在php的檔頭要加
header('Content-type: text/html; charset=utf-8');
header('Vary: Accept-Language');

4.在mysql的連線之後要加
mysql_query("SET NAMES utf8",$connect);
mysql_query("SET CHARACTER_SET_CLIENT=utf8",$connect);
mysql_query("SET CHARACTER_SET_RESULTS=utf8",$connect);  

5.在create table時,要指定字元集
create table tb_manager (
i_manager_id int NOT NULL auto_increment,
i_udate int(15),
i_mdate int(15),
)TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

至於httpd.conf,my.conf,php.ini等,則使用default 就可以了;

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
分享MySQL和php採用UTF8的詳細方法
« 回覆 #4 於: 2006-10-29 21:46 »
我不是有意要吐糟你  , 不過你的做法 將會造成你的系統誇平台的障礙 .

許蓋功的問題 不是 big5 或 utf-8 編碼 造成的 ,

而是 吐出字串時 為了 消除 escape 字元 順便把 許蓋功內的 escape 字元 也消除了才造成亂碼 .

使用 utf-8 沒什麼不好 , 但是 utf-8 的容量 有點大  ,而且 utf-8  要再 轉 big5 會有其它難解決的問題 .

從 :

http 的 header ,

php 的 header ,

mysql 的 data type ,

php 的 header ,

切入 強制語細 不是 pubilc 的做法 很不建議大家這樣做 ,會造成後續維護的人的困擾

DEFAULT 的 data type 並不會 造成許蓋功的問題 .

用 public 的設定一樣可以做 utf-8 的輸入輸出, 但好處是在 pubilc 的設定環境中 .

你的軟體可以 通用在 大部份的環境之中 .

反之 如果 你要把軟體放到別的機器上 , 而上頭又有其它 資料了 .

你總不能 要求對方 為了你的軟體 改變自己的系統環境 設定 .

以上建議 供參考 ..
你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

cch

  • 憂鬱的高中生
  • ***
  • 文章數: 194
    • 檢視個人資料
分享MySQL和php採用UTF8的詳細方法
« 回覆 #5 於: 2007-02-06 16:17 »
值得收下來備用!good!

workingman

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
回覆: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #6 於: 2008-08-21 15:26 »
这个方法太繁复,不如在PHP文件开头用mysql_query("set names utf8;"); 就好。

achilles

  • 懷疑的國中生
  • **
  • 文章數: 30
    • 檢視個人資料
    • http://www.vixual.net/
回覆: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #7 於: 2008-08-21 17:39 »
就我所知,好像沒這麼複雜,不須修改 httpd.conf, my.ini, php.ini,只要符合幾點即可:

1. PHP 程式檔本身的編碼格式是 utf8
2. MySQL 資料表的欄位的校對屬性設為 utf8_unicode_ci,就是欄位加上 collate utf8_unicode_ci
3. PHP 在與 MySQL 溝通時,要先送出 SET NAMES utf8
4. PHP 在輸出畫面前,要先送出 header('Content-type: text/html; charset=utf-8');

可參考我的網頁:
http://www.vixual.net/blog/archives/315
http://www.vixual.net/blog/archives/310
Vixual 網路視野
http://www.vixual.net/

edwardleung

  • 俺是博士!
  • *****
  • 文章數: 1135
    • 檢視個人資料
回覆: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #8 於: 2008-12-09 11:27 »
您好,

不好意思...
請問 utf8_unicode_ci 與 utf8_general_ci 有何不同?
處理數據時對Ram 的需求有分別嗎 ?

謝謝!

Ed.

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
回覆: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #9 於: 2008-12-20 20:10 »
您好,

不好意思...
請問 utf8_unicode_ci 與 utf8_general_ci 有何不同?
處理數據時對Ram 的需求有分別嗎 ?

謝謝!

Ed.


google :

http://www.google.com.tw/search?q=utf8_unicode_ci&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

引用
utf8_general_ci 在轉換時速度比較快
utf8_unicode_ci 在轉換時比較精準

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY

edwardleung

  • 俺是博士!
  • *****
  • 文章數: 1135
    • 檢視個人資料
回覆: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #10 於: 2008-12-22 13:10 »
您好,

那麼請問那種模式較被常用呢?

謝謝...

appleboy

  • 活潑的大學生
  • ***
  • 文章數: 224
    • 檢視個人資料
    • 小惡魔筆記
回覆: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #11 於: 2008-12-22 13:13 »
您好,

那麼請問那種模式較被常用呢?

謝謝...


請問你有把文章看完嗎?

我自己的用法兩種我都有在用

以我目前狀況,我覺得兩種都ok 當然 prefer unicode

歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY

日落

  • SA 苦力組
  • 憂鬱的高中生
  • ***
  • 文章數: 96
    • 檢視個人資料
    • http://zeroplex.blogspot.com/
Re: 分享MySQL和php採用UTF8的詳細方法
« 回覆 #12 於: 2013-02-09 16:38 »
補一下
MySQL 5.5 參數有更動
改成:
代碼: [選擇]
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

Reference:
http://dev.mysql.com/doc/refman/5.5/en/mysql-nutshell.html
https://dev.mysql.com/doc/refman/5.5/en/charset-connection.html