關於字元編碼的問題?

來源:互聯網
上載者:User
中文在gb2312編碼的時候是2位元組,但在unicode編碼的 情況下是1-3位元組不等,英文則都是1位元組,但在mysql中不做這方面的設定,varchar的長度不管是中文和英文都是一格字算一個,那麼。。為什麼要做這個1個漢字相當於2個英文字元的設定?

回複內容:

中文在gb2312編碼的時候是2位元組,但在unicode編碼的 情況下是1-3位元組不等,英文則都是1位元組,但在mysql中不做這方面的設定,varchar的長度不管是中文和英文都是一格字算一個,那麼。。為什麼要做這個1個漢字相當於2個英文字元的設定?

http://xfhnever.com/blog/2014/12/20/encodingformat/ 中稍微介紹了一下各種編碼格式

varchar(20)指定的是字元長度
mysql中會指定表的字元集,如下面的CHARSET=gbk

 CREATE TABLE `test_type` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`),) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=gbk COLLATE=gbk_bin

為什麼要做這個1個漢字相當於2個英文字元的設定?

這種設定是一般基於字串的自然長度(也就是顯示的長度), 一個漢字等於2個英文字母或數字。對於普通使用者來講就是字樣,計算位元組一般不都是程式和程式員乾的事麼。所以一般的程式設計中,一般遵循著一個漢字就是2個英文字母長度的設定,而具體佔用空間則視編碼和環境進行計算。

參建函數 mb_strwidth()

最早出現的編碼是ASCII這樣面向英文語言的編碼,ASCII定義了0-127,一共128個字元的編碼。對於英語這樣用26個字元的,自然是夠用的。問題是,如果是其他使用的字元多餘26個的西方文字呢?由於已經約定了0x7F空間內的字元編碼,所以我們可以看到有些西方文字,例如俄文是完全不和英文共用部分字元的,需要使用ASCII擴充集。在編碼理論發展的過程,出現過各個地區分別採用不同編碼體系來編碼本國文字。中國是使用ISO2022體系,編碼了中國的常用字元GB2312,更多的字元GBK,以及最大的集合GB18030。

通過簡單的思考,你會發覺一個位元組8bits只能編碼類別似英文這樣的文字系統,而中文的常用字就有幾千上萬個。所以至少需要2個位元組。

Unicode的出現,目的是統一全世界所有的字元編碼空間,不會造成字元編碼衝突問題。例如,如果你用GBK編碼的字元,用UTF-8編碼解釋,也可能是字面有效。Unicode編碼有UTF-8,UTF-16,UTF-32,甚至UTF-7等多種格式。常說的Unicode編碼是指UTF-16,因為它能以統一的方式編碼幾乎所有常用的字元,所以如果不是針對極端情況,我們可以假設字元都能用UTF-16表示。在UTF-16編碼的情況下,漢字和英文每個字元的長度都是2個位元組,是等長的。在Windows系統內部就是利用這種特性,高效的處理文字。UTF-8應用也很廣泛,好處是儲存上來說空間節省,解碼複雜些。

MySQL在多個層面上都做了Encoding的設計,支援在不同層面上指定字元編碼。

不過顯然,我們應該推薦在各個層面是使用UTF-8編碼。如果是記憶體中處理,推薦使用UTF-16,其實各種語言在設計中,好像也是這樣設計的。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.