varchar類型存儲英文和漢字占用的字節和字符數


編碼格式知識

一、關於 UTF-8

UTF-8(Unicode Transformation Format-8bit)。是用以解決國際上字符的一種多字節編碼。

對英文使用 8 位(即一個字節) ,中文使用 24 位(三個字節)來編碼

UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。

UTF-8編碼的文字可以在各國支持 UTF-8 字符集額的瀏覽器上顯示。 如果是UTF-8編碼,則在外國人的英文 IE 也能顯示中文,他們無需下載 IE 的中文語言支持包。

二、關於 GBK

GBK 是國家標准 GB2312 基礎上擴容后兼容 GB2312 的標准。

GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示,為了區分中文,將其最高位都設定成 1。

GBK包含全部中文字符,是國家編碼,通用性比 UTF8 差,不過 UTF8 占用的數據庫比GBK大。

三、關於 utf8mb4

MySql 5.5 之前,UTF8 編碼只支持 1-3 個字節,只支持 BMP 這部分的 unicode 編碼區,BMP 是基本就是 0000 ~ FFFF 這一區。

從 MySQL 5.5 開始,可支持 4 個字節 UTF 編碼 utf8mb4,一個字符最多能有 4 字節,所以能支持更多的字符集。

utf8mb4 is a superset of utf8

tf8mb4 兼容 utf8,且比 utf8 能表示更多的字符。

至於什么時候用,看你做的什么項目了……在做移動應用時,會遇到IOS用戶在文本的區域輸入emoji表情,如果不做一定處理,就會導致插入數據庫異常。

四、漢字長度與編碼有關

MySql 5.0 以上的版本

1、一個漢字占多少長度與編碼有關:

UTF-8:一個漢字 = 3 個字節,英文是一個字節

GBK: 一個漢字 = 2 個字節,英文是一個字節

2、varchar(n) 表示 n 個字符,無論漢字和英文,MySql都能存入 n 個字符,僅實際字節長度有所區別。好比varchar(20),指的是20字符,無論存放的是數字、字母還是UTF8漢字(每個漢字3字節),都可以存放20個。

3、MySQL 檢查長度,可用 SQL 語言

SELECT LENGTH(fieldname) FROM tablename;

驗證示例

驗證5.0版本以上UTF-8編碼格式下varchar類型存儲英文和漢字占用的字節和字符數——一個漢字3 個字節,英文是一個字節。

# 創建表

CREATE TABLE `str_test` (

  `str_ch` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '中文字符',

  `str_en` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '英文字符'

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

# 插入數據

INSERT INTO `drools`.`str_test`(`str_ch`, `str_en`)

VALUES ('新年快樂', 'happy new year');

# '新年快樂'占用的長度(字節數)和占用的字符數

# 'happy new year'占用的長度(字節數)和占用的字符數

 

 <END>

⭐️希望本文章對您有幫助,您的「 轉發、點贊 是我創作的無限動力。

掃描下方二維碼關注微信公眾號,您會收到更多優質文章推送。


免責聲明!

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



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