編碼格式知識
一、關於 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>
⭐️希望本文章對您有幫助,您的「 轉發、點贊 」是我創作的無限動力。
掃描下方二維碼關注微信公眾號,您會收到更多優質文章推送。