Mysql以utf8儲存gbk輸出的實現方法提供

來源:互聯網
上載者:User

一個站有可能經曆gb2312(gbk,big5)到utf8的轉換過程,其中會遇到很多的問題。網站太龐大了怎麼辦呢,只能一步步來了。要是能在極少改動前端代碼的情況下,先完成資料的轉換將會使整件事情容易得多。經過幾天測試終於發現,Mysql以utf8儲存gbk輸出是可以實現的。mysql4.1後都有個特性,可以指定當前用戶端串連所使用的字元集,mysql預設都是latin1,或由mysql server端配置的字元集進行串連校對。我使用utf8_general_ci來建立欄位。
DB:
SQL代碼: 複製代碼 代碼如下:Create TABLE `table` (
`id` INT( 10 ) NOT NULL ,
`name` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
INDEX ( `g_id` )
) ENGINE = innodb CHARACTER SET utf8 COLLATE utf8_general_ci;

PHP:
儲存操作指定使用utf8字元集進行串連校對,讀取操作指定使用gbk字元集進行串連校對。

PHP代碼: 複製代碼 代碼如下:<?php
// Select DB And Set Link Use UTF8
function _select_db_utf()
{
mysql_select_db($this->db_name, $this->db_link);

// init character
mysql_query("SET NAMES utf8", $this->db_link);
mysql_query("SET CHARACTER SET utf8", $this->db_link);
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'", $this->db_link);

return true;
}

// Select DB And Set Link Use GBK
function _select_db_gb()
{
mysql_select_db($this->db_name, $this->db_link);

// init character
mysql_query("SET NAMES gbk", $this->db_link);
mysql_query("SET CHARACTER SET gbk", $this->db_link);
mysql_query("SET COLLATION_CONNECTION='gbk_chinese_ci'", $this->db_link);

return true;
}
?>

需要注意幾點:
1. mysql必須把gbk,gb2312,utf8等字元集編譯進去。
2. 入庫的資料內容必須保證是最正確的UTF8編碼。
3. 儲存和讀取操作要指定正確的字元集進行串連校對。

要是前端代碼操作資料入庫不能以UTF8進行,則需要對字元進行轉碼了。(例如用AJAX提交的資料便是正確的UTF8,這時是不用轉換的。)

因為mb_string是PHP所支援字元最全的,而iconv比它稍差一點,mb_string並不能完全支援一些特殊字元的轉碼,所以目前為止都沒有完美的轉碼方法。

再次對mb_string和iconv進行比較:

mb_string:
1. 所支援字元最全
2. 內容自動識別編碼,不需要確定原來字元的編碼,但是執行效率比iconv差太多
3. $content = mb_convert_encoding($content, "UTF-8", "GBK,GB2312,BIG5");(順序不同效果也有差異)

iconv:
1. 所支援字元不全
2. 需要確定原來字元的編碼,但在確定編碼的情況下執行效率比mb_convert_encoding高
3. $content = iconv("GBK", "UTF-8", $content);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.