mysql的字符集與校驗規則概念

2021-09-01 11:06:43 字數 3320 閱讀 1052

剛剛接觸mysql的人(like me),可能對這2個概念不是太理解,這裡小小解釋一下,希望能說明清楚這個問題。

字符集,character set,就是一套表示字元的符號和這些的符號的底層編碼;而校驗規則,則是在字符集內用於比較字元的一套規則。字符集還是比較容易理解的,主要是校驗規則,下面我簡單舉個例子來說明一下:

如在某個字符集「x」的a與a,他們的底層編碼分別是a=0,a=100。這裡符號「a」「a」和底層編碼「0」「100」就是字符集的概念範圍。假設我們要比較a與a的大小,我們得到a>a,因為我們是根據其底層編碼進行比較的,這就是這個字符集「x」的一種校驗規則「z」(根據底層編碼來比較)。假設,現在有另外一種校驗規則,是先取其相反數,然後再比較大小,那麼就很顯然的得到a 

關於字符集與校驗規則,mysql能:

1、使用字符集來儲存字串,支援多種字符集;

2、使用校驗規則來比較字串,同種字符集還能使用多種校驗規則來比較;

3、在同一臺伺服器、同乙個資料庫或者甚至在同乙個表中使用不同字符集或校對規則來混合組合字串;

4、可以在任何級別(伺服器、資料庫、表、字段、字串),定義不同的字符集和校驗規則。

查詢你的mysql資料庫所支援的字符集種類,可以如下:

mysql> show character set;

+———-+—————————–+———————+——–+

| charset | description | default collation | maxlen |

+———-+—————————–+———————+——–+

| big5 | big5 traditional chinese | big5_chinese_ci | 2 |

| dec8 | dec west european | dec8_swedish_ci | 1 |

| ………| …………………. | ……………. | . |

| eucjpms | ujis for windows japanese | eucjpms_japanese_ci | 3 |

+———-+—————————–+———————+——–+

36 rows in set (0.00 sec)

這裡的maxlen表示要用最大多少個位元組來儲存字符集的單個詞,default collation表示該字符集的預設校驗規則。

你也可以利用like來進行篩選,如下:

mysql> show character set like 『latin%』;

+———+—————————–+——————-+——–+

| charset | description | default collation | maxlen |

+———+—————————–+——————-+——–+

| latin1 | cp1252 west european | latin1_swedish_ci | 1 |

| latin2 | iso 8859-2 central european | latin2_general_ci | 1 |

| latin5 | iso 8859-9 turkish | latin5_turkish_ci | 1 |

| latin7 | iso 8859-13 baltic | latin7_general_ci | 1 |

+———+—————————–+——————-+——–+

4 rows in set (0.00 sec)

查詢你的mysql資料庫所支援字符集的校驗規則,可以如下:

mysql> show collation;

+———————-+———-+—–+———+———-+———+

| collation | charset | id | default | compiled | sortlen |

+———————-+———-+—–+———+———-+———+

| big5_chinese_ci | big5 | 1 | yes | yes | 1 |

| big5_bin | big5 | 84 | | yes | 1 |

| dec8_swedish_ci | dec8 | 3 | yes | | 0 |

| …….. | …. | .. | … | … | . |

| eucjpms_bin | eucjpms | 98 | | yes | 1 |

+———————-+———-+—–+———+———-+———+

127 rows in set (0.00 sec)

這裡compiled表示該collation所對應的character set是否被編譯到此mysql資料庫,通過此點就可以知道該mysql資料庫是否支援某個字符集。sortlen表示要在記憶體中排序時,該字符集的字元要占用多少個位元組。

你也可以利用like來進行篩選,如下:

mysql> show collation like 『latin1%』;

+——————-+———+—-+———+———-+———+

| collation | charset | id | default | compiled | sortlen |

+——————-+———+—-+———+———-+———+

| latin1_german1_ci | latin1 | 5 | | yes | 1 |

| latin1_swedish_ci | latin1 | 8 | yes | yes | 1 |

| latin1_danish_ci | latin1 | 15 | | yes | 1 |

| latin1_german2_ci | latin1 | 31 | | yes | 2 |

| latin1_bin | latin1 | 47 | | yes | 1 |

| latin1_general_ci | latin1 | 48 | | yes | 1 |

| latin1_general_cs | latin1 | 49 | | yes | 1 |

| latin1_spanish_ci | latin1 | 94 | | yes | 1 |

+——————-+———+—-+———+———-+———+

8 rows in set (0.00 sec)

大家可能已經發現collation的名字似乎有規律可循,其實的確也是這樣的,並且它也有些特徵,如下:

1、兩個不同的字符集不能有相同的校驗規則(字符集:校驗規則 = 1:n);

2、每個字符集都有乙個校驗規則,就是對應的default=yes的那個collation;

3、collation命名規則:字符集名_對應的語言名_ci/cs/bin,其中ci表示大小寫不敏感性,cs表示大小寫敏感性,bin表示二進位制。

**

MYSQL字符集與校對規則

一.字符集與校隊規則概述 簡單的說字符集就是一套文字元號及編碼 比較規則的集合。目前支援中文的常用的字符集有utf 8 gbk gb2312等,mysql伺服器支援多種字符集,在同一臺伺服器 同乙個資料庫或者同乙個資料表中的不同欄位都可以使用不同的字符集 mysql的字符集包括字符集 charact...

mysql字符集與排序規則

資料庫需要適應各種語言和字元就需要支援不同的字符集 character set 每種字符集也有各自的排序規則 collation 系統管理在安裝時定義乙個預設的字符集和排序規則。也可以在建立資料庫時對資料庫範圍,建表時對錶級別,甚至列級別設定字元和排序規則。檢視排序規則 字尾 cs或者 ci的意思是...

MySQL 的字符集與排序規則

今天突然被同事問到,mysql 裡的 uft8 與 utf8mb4 究竟有什麼區別,當時我也是一臉問號,因此特地去了解了一下。uft8 與 utf8mb4 其實指的是 mysql 中的字符集,那到底什麼是字符集呢?很多人常常會把字元 字符集 字元編碼的概念混為一談,今天我們仔細來看看。何為字元?字元...