MySQL的字符集



一、關於字符集的幾個相關概念sql

(1)字符Character,人類語言中最小的表意(表達意思的)符號數據庫

(2)字符集(合)CharSet 一組字符就能夠定義一個字符集合,一般包括一個國家、民族使用的字符windows

ASCII字符集合、擴展ASCII字符集合、拉丁語系、GB2312 BIG5 Unicode字符集合服務器

(3)字符編碼 給字符集合中的字符指定一個數字來標識ide

(4)字符集 字符集合+編碼=字符集工具

(5)字符序 Collation 定義了字符集中字符的排序規則(是否區分 大小寫),有了字符序,就有了排序標準。一個字符集能夠 有多個字符序,有的字符序可能區分大小寫,有的字符序可能不區分大小寫。編碼


字符集合 能夠有多種編碼方式 多個字符集spa

一個字符集 能夠有多個排序規則 多個字符序3d


字符序 Collation中的以_ci結尾表明大小寫不敏感,應該是case insensitive,以_cs結尾表示大小寫敏感,以_bin按編碼值進行比較code


wKiom1ffS0_iNG-NAAAzTYYJvQg144.png



二、常見的字符集

ASCII字符集

擴展ASCII字符集 latin1 8位二進制,包括ASCII字符集中的所有字符

GB2312 BIG5 GBK 16位二進制

Unicode字符集 全球語言 16位二進制


wKiom1ffTNyg3h-8AAW92GXRcrE665.jpg

擴展ASCII字符集,例如:latin一、latin2

Unicode字符集合 Unicode編碼 一個字符兩個字節

Unicode字符集合 UTF-8編碼 一個英文字符一個字節,一箇中文字符使用3個字節


UTF-8是一種變長字節編碼方式。對於某一字符的UTF-8編碼,若是隻有一個字節則其最高二進制爲0;若是是多字節,其第一個字節從高位開始,連續的二進制爲1的個數決定了其編碼的倍數,其他字節均以10開頭。UTF-8最多可用到6個字節。

以下:

1字節 0xxxxxxx

2字節 110xxxxx 10xxxxxx

3字節 1110xxxx 10xxxxxx 10xxxxxx

4字節 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

5字節 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

6字節 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


編碼的本質就是用一個數值來表示一個字符

如何獲取一個漢字在UTF-8編碼中碼值呢?

例如一個「忍」字,它對應的UTF-8編碼是E5BF8D

wKiom1ffVUaCYdgrAAAxDW0nos0500.png

將E5BF8D轉換爲二進制111001011011111110001101

wKioL1ffVhrR_RRgAAHR-61qAGE270.gif


咱們知識中文在UTF-8中佔用3個字節,所以它的模板是

1110xxxx 10xxxxxx 10xxxxxx

wKioL1ffV1vgK6olAAAR4STq9y4540.png

所以,「忍」字對應的UTF-8碼值爲0101 1111 1100 1101,這16個二進制,剛好是兩個字節

再將這16個二進制數轉換爲16進制數,即5FCD。

wKiom1ffWFLxvpaDAAGURlsrwF0215.gif

再次查看編碼查詢工具,發現BigEndUni的值正好是「5FCD」

wKiom1ffWJzAtvM3AAAw5sL0itY906.png




一樣的字符,使用的編碼方式不一樣,佔用的字節數也不相同

(1)Unicode編碼存儲英文。

打開記事本ABCD佔用10個字節,「ABCD」一共4個字符,每一個字符采用Unicode編碼佔用2個字節,共8個字節,再加上結束字符(EOF)2個字節,共10個字節。

wKioL1ffTnzCjPthAAAeKlsn23A400.png

(2)Unicode編碼存儲中文

記事本中輸入「ABCD你好」,一共6個字符,共佔12字節,再加上結束字符(EOF)2個字節,共14字節。

wKiom1ffT02ySgXbAAAdWnDvDKg903.png


(3)UTF-8編碼存儲英文

記事本中輸入「ABCD」,共4個字符,每一個英文字符佔1個字節,共4個字節,再加上結束字符(EOF)3個字節,共7個字節。

wKioL1ffUDCixF4MAAAcXCGmuOk063.png

(4)UTF-8編碼存儲中文

記事本中輸入「ABCD你好」,4個英文字符,每一個英文字符佔1個字節,共4個字節,2箇中文字符,每一箇中文字符佔3個字節,共6個字節,再加上結束符(EOF)3個字節,共13個字節。

wKioL1ffULfzeSuHAAAXCvpizCk274.png



在控制檯查看可接受的字符集

使用chcp [nnn]

wKiom1ffXFfC2mNbAAKwSGZLtW4337.gif

顯示活動控制檯代碼頁數量,或更改該控制檯的活動控制檯代碼頁。若是在沒有參數的狀況下使用,則 chcp 顯示活動控制檯代碼頁的數量。 
語法 
chcp [nnn] 
參數 
指定代碼頁。下表列出了全部支持的代碼頁及其國家(地區)或者語言: 
代碼頁       國家(地區)或語言 
437          美國 
932          日文(Shift-JIS)
936          中國 - 簡體中文(GB2312)
949          韓文
950          繁體中文(Big5)


說明windows默認的字符集爲 GBK




三、MySQL中的字符集


3.一、查看MySQL支持的全部字符集

show character set;

wKiom1ffXS-yBeF2AABt4SZkFAU024.png


3.二、MySQL中字符集的使用策略:數據庫級別、表級別、列級別

建立數據庫的時候,若是不指定數據庫的字符集,就會使用服務器的默認字符集

建立表的時候,若是不指定表的字符集,就會使用數據庫字符集

建立列的時候,若是不指定字符集,默認使用表的字符集


3.三、查看當前使用的字符集

show variables like 'character_set_%';

wKioL1ffX9ejg2K4AACeudxZnwE337.png


character_set_system 系統級別的字符集

character_set_server 服務器級別使用的字符集

character_set_database 數據庫級別的字符集(每一個數據庫可能有本身的字符集)


character_set_system,是server用來存儲identifier(例如:數據庫的名字、表的名字、列的名字)的字符集,老是utf8。

wKioL1ffY67RWAMEAABHOd75OCE447.png

character_set_server,是server的默認字符編碼。【猜測:character_set_system是用來存儲identifier(標識符,例如:數據庫名、表名、列名可使用中文),而character_set_server是用來指示content(存儲內容)使用的字符編碼】

wKiom1ffZEqDfHJ6AABLn-eKElc665.png

chracter_set_database,若是當前沒有選中數據庫,則使用character_set_server的值;若是選定了某個數據庫,則會根據該數據庫相應的存儲內容的字符集。

wKiom1ffZieAo4ZFAAB1b3KJ1eI069.png


後面的內容,不知道該如何整理了,可能本身還不太清楚吧。。。

character_set_client

character_set_connection

character_set_results


更改MySQL默認字符集


create database schooldb


set names latin1

set names utf8


字符集兼容性

相關文章
相關標籤/搜索