????平時(shí)建數(shù)據(jù)庫,建表啊都沒有很在意這個(gè)兩個(gè)規(guī)則,應(yīng)該不只我是沒在意這個(gè)吧,如果不是出現(xiàn)問題大部分應(yīng)是選擇默認(rèn)的規(guī)則,竟然有這方面的規(guī)則。下面查閱下中文官網(wǎng),一起學(xué)習(xí)下這方面知識(shí)(中文:https://www.mysqlzh.com/doc/95.html,英文:https://dev.mysql.com/doc/refman/8.0/en/charset-general.html)。
? ? 字符集和排序的規(guī)則含義:

看圖可以了解到他們的含義,他們兩之間的關(guān)系統(tǒng):“任何一個(gè)給定的字符集至少有一個(gè)校對(duì)規(guī)則。它可能有幾個(gè)校對(duì)規(guī)則”,意思表達(dá)很明確了,至少有一個(gè)校對(duì)規(guī)則,那問題來了平時(shí)建庫建表沒關(guān)注到這些,是不是有一個(gè)默認(rèn)的規(guī)則,那這規(guī)則是什么?下面的繼續(xù)看看文檔信息:

大家可以根據(jù)上圖查詢到數(shù)據(jù)庫維度的配置的默認(rèn)的規(guī)則信息,字符集和校對(duì)規(guī)則有4個(gè)級(jí)別的默認(rèn)設(shè)置:服務(wù)器級(jí)、數(shù)據(jù)庫級(jí)、表級(jí)和連接級(jí),,我們常用其它維度的比如:表,字段,直接查看表的結(jié)構(gòu)信息就一目了然了,不同維度之間的關(guān)系必然是粒度最細(xì)最優(yōu)先,還有一種情況?就是直接在sql中使用COLLATE?命令來定校對(duì)規(guī)則(這個(gè)基本不會(huì)用到)。

字符集和排序的規(guī)則分類:

種類太多就不易截圖了,想知道所有類型可以用上面的命令在數(shù)據(jù)庫查看(https://dev.mysql.com/doc/refman/8.0/en/charset-charsets.html).
常用字符集:

上圖可以看出來 utf8mb4與utf8之間的區(qū)別了,默認(rèn)的校對(duì)規(guī)則不一樣,以及最大的長(zhǎng)度一個(gè)3字節(jié),一個(gè)是4字節(jié)。其實(shí)支持中文支持字符集還有GBK國家標(biāo)準(zhǔn),那為什么不用GBK了,UTF8是國標(biāo)準(zhǔn),以及他們存儲(chǔ)的對(duì)字符存儲(chǔ)的字節(jié)數(shù)也不一樣,GBK中英文都雙字節(jié),UTF8中文三字節(jié),英文一字節(jié)。相對(duì)而言UTF8更優(yōu)一些。
常用校對(duì)規(guī)則:
? ? ? ?介紹時(shí)也提到一下校對(duì)規(guī)則后綴的一些含義,可以很清晰看出來的他們的實(shí)際作用。 uft8mb4的校規(guī)其實(shí)挺多的:

例舉一下幾個(gè)常用的: utf8mb4_bin,utf8mb4_general_ci,utf8mb4_0900_ai_ci,utf8mb4_0900_as_cs,看看資料的描述,

上面提到了_CS他們是大小敏感的,其中_ bin也是大小敏感,注意了這個(gè)規(guī)則不僅影響著排序的結(jié)果,還是影響到大小寫的查詢結(jié)果,再繼續(xù)看看_ai,_as的是什么含義:

其它注意點(diǎn):


今天就學(xué)習(xí)到這里,有其它關(guān)鍵信息的地方后續(xù)再補(bǔ)上,散會(huì)。