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

2022-10-04 06:00:17 字數 1601 閱讀 8147

乙個站有可能經歷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    _selespobjct_db_utf()  

//    select    db    and    set    link    use   &程式設計客棧nbsp;gbk  

function    _select_db_gb()  

?>  

需要注意幾點:

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);

本文標題: mysql以utf8儲存gbk輸出的實現方法提供

本文位址:

gbk 轉換 utf 8問題

問題一 檔案已經另存為了utf 8碼,但關閉後重新開啟就自動變成了ansi編碼 答 原因是該檔案中沒有包含任何中文字元,如果該檔案有包含中文字元,將檔案另存為utf 8編碼後,中文字元會以3個位元組的寬度來儲存 要看16進製制 這樣,在第二次開啟檔案時,編輯器會自動將檔案識別為utf 8編碼。請仔細...

UTF 8和GBK的區別

utf 8和gbk的區別 2009年06月09日 星期二 下午 02 00 gbk是國家標準gb2312基礎上擴容後相容gb2312的標準。gbk的文字編碼是用雙位元組來表示的,即不論中 英文本元均使用雙位元組來表示,為了區分中文,將其最高位都設定成1。gbk包含全部中文字元,是國家編碼,通用性比u...

GBK與UTF 8的區別

gbk的文字編碼是雙位元組來表示的,即不論中 英文本元均使用雙位元組來表示,只不過為區分中文,將其最高位都定成1。至於utf 8編碼則是用以解決國際上字元的一種多位元組編碼,它對英文使用8位 即乙個位元組 中文使用24位 三個位元組 來編碼。對於英文本元較多的論壇則用utf 8節省空間。gbk包含全...