細說一個漢字等於幾個字符,以及漢字,字符,字節,位之間的關系


     一:
        1個漢字 = 1個字 = 1個字符

     二:
        1個字符 = 1個字節 = 8bit(ACSII碼下)

     三:
        1個字符 = 2個字節 = 16bit(Unicode碼下)

 

以前一直使用oracle11g,一個漢字占3個字節,所以在操作MySQL時也一直這樣分配長度。

今天測試了下mysql發現不對了

可以看到第一個的長度確實是15,但是第二個為什么是5?

在網上找到資料:char_length計算的是字符長度,而length計算的是字節長度,剛好我使用的是utf8,一個漢字占3個字節,占一個字符。

 

那好了,應該是對的上了,可是好奇心我就試了下

 

為什么這是相同的?因為這不是漢字,一個字母一個字符一個字節。

 

好了,現在知道原來mysql和Oracle一樣的,但是又看到一篇說mysql的varchar與oracle的varchar2是不一樣的,前者是用字符做單位的,后者是用字節做單位的。對於oracle11g的varchar2是用字節做單位的在以前玩oracle時測試過,但是mysql就沒有測試過,好吧現在測試下。我先將字段長度改小看下能不能給容下,測試結果確實是可以的,證明mysql的varchar是用字符做單位的,這里就不貼圖了,大家可以自己驗證下。

總結:oracle 中varchar2(10)  既10個字節3個漢字

            mysql  中varchar(10) 既10個字符10個漢字

所以現在可以將mysql的varchar字段減小1/3了,性能也能提高哦。

 

 

問題1:一個中文字符用utf-8編碼占用幾個字節,gbk,gb2312,還有iso8859-1呢?

答案1:常用中文字符用utf-8編碼占用3個字節(大約2萬多字),

但超大字符集中的更大多數漢字要占4個字節(在unicode編碼體系中,U+20000開始有5萬多漢字)。
GBK、GB2312收編的漢字占2個字節,嚴格地用iso8859-1無法表示漢字,只能轉為問號。

 

 

漢字一個字占兩個字節。英文字母一個字母占一個字節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM