概要
主旨是為了研究mysql里的字符集,在實(shí)踐中發(fā)現(xiàn)中文的排序順序有點(diǎn)問(wèn)題,為了能讓中文排序正常,嘗試更改各種字符集做測(cè)試。
Mysql官方版本8.0以前默認(rèn)的應(yīng)該是latin1,8.0后默認(rèn)為utf8mb4了
Docker安裝Mysql
docker拉取Mysql官方鏡像站地址:https://hub.docker.com/_/mysql
docker可以一鍵拉取,并映射本地/data/mysql/data 到 容器里的 /var/lib/mysql
docker pull mysql:8.2.0-oraclelinux8
docker run --name mysql8 -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root密碼 -p 3306:3306 -p 33060:33060 -d mysql:8.2.0-oraclelinux8
字符集配置
官方相關(guān)手冊(cè)說(shuō)明:MySQL :: MySQL 8.0 Reference Manual :: 10.2 Character Sets and Collations in MySQL
我們可以使用幾個(gè)命令查看
SELECT version(); #查看數(shù)據(jù)庫(kù)版本
SHOW CHARACTER SET; #查看數(shù)據(jù)庫(kù)字符集
SHOW COLLATION WHERE Charset = 'utf8mb4'; #查看utf8mb4里可用的collation
SHOW VARIABLES LIKE 'character_set%'; #查看系統(tǒng)里對(duì)象的默認(rèn)字符集
SHOW VARIABLES LIKE 'collation_database%'; #查看數(shù)據(jù)庫(kù)的默認(rèn)collation
utf8mb4是 utf8?的一個(gè)超集,就是可以多存放一些類型,比如表情符號(hào),是Mysql8后的推薦的字符集,最大支持長(zhǎng)度4個(gè)字節(jié),最小占用存儲(chǔ)長(zhǎng)度還是1個(gè)字節(jié),utf8的邊碼規(guī)則和原理可以查看我的同名博客文章?ASCII、Unicode、UCS-2、UTF-8互轉(zhuǎn)
?排序規(guī)則說(shuō)明
我們查看utf8mb4下面其實(shí)會(huì)有很多排序規(guī)則可以選擇
?
以上這些規(guī)則具體選用哪一個(gè),選擇的依據(jù)是是什么呢
以默認(rèn)的這個(gè)?utf8mb4_0900_ai_ci 示例說(shuō)明
● 0900 是指?UCA 9.0.0標(biāo)準(zhǔn)。其中 UCA是?Unicode Collation Algorithm的縮寫,UCA 9.0.0標(biāo)準(zhǔn)可以參考(?https://www.unicode.org/Public/UCA/9.0.0/allkeys.txt )
像?utf8mb4_unicode_520_ci 就是?UCA 5.2.0 (?https://www.unicode.org/Public/UCA/5.2.0/allkeys.txt )
● ai、ci說(shuō)明
官方這一塊的說(shuō)明:MySQL :: MySQL 8.0 Reference Manual :: 10.3.1 Collation Naming Conventions
Suffix | Meaning |
---|---|
_ai |
Accent-insensitive?? |
_as |
Accent-sensitive |
_ci |
Case-insensitive |
_cs |
Case-sensitive |
_ks |
Kana-sensitive |
_bin |
Binary |
?ai和as是相對(duì)的,是否區(qū)分重音的意思,對(duì)于中國(guó)場(chǎng)景其實(shí)是用不到的,比如?Cafe和Café,一個(gè)頭上有音標(biāo)一個(gè)沒(méi)有音標(biāo)這種。
ci和cs是相對(duì)的,是否大小寫敏感,如果是ci場(chǎng)景,hengrui=Hengrui,如果是cs場(chǎng)景?hengrui≠Hengrui
ks 是日語(yǔ)里假名的意思?かな(kana)
還有帶地域的?utf8mb4_zh_0900_as_cs
● zh是中文的意思
這一塊簡(jiǎn)寫可以參考下表,官方地址:MySQL :: MySQL 8.0 Reference Manual :: 10.10.1 Unicode Character Sets
Language | Language Specifier |
---|---|
Bosnian | bs |
Bulgarian | bg |
Chinese | zh |
Classical Latin |
la ?or?roman
|
Croatian |
hr ?or?croatian
|
Czech |
cs ?or?czech
|
Danish |
da ?or?danish
|
Esperanto |
eo ?or?esperanto
|
Estonian |
et ?or?estonian
|
Galician | gl |
German phone book order |
de_pb ?or?german2
|
Hungarian |
hu ?or?hungarian
|
Icelandic |
is ?or?icelandic
|
Japanese | ja |
Latvian |
lv ?or?latvian
|
Lithuanian |
lt ?or?lithuanian
|
Mongolian | mn |
Norwegian / Bokm?l | nb |
Norwegian / Nynorsk | nn |
Persian | persian |
Polish |
pl ?or?polish
|
Romanian |
ro ?or?romanian
|
Russian | ru |
Serbian | sr |
Sinhala | sinhala |
Slovak |
sk ?or?slovak
|
Slovenian |
sl ?or?slovenian
|
Modern Spanish |
es ?or?spanish
|
Traditional Spanish |
es_trad ?or?spanish2
|
Swedish |
sv ?or?swedish
|
Turkish |
tr ?or?turkish
|
Vietnamese |
vi ?or?vietnamese
|
注意點(diǎn)
在不同字符排序規(guī)則之間做比較系統(tǒng)是會(huì)報(bào)錯(cuò)的,所以建議在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候就設(shè)定好
報(bào)錯(cuò)示例
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-815024.html
如果歷史因素必須出現(xiàn)不同字符排序,可以手動(dòng)聲明規(guī)則,示例:collate utf8mb4_0900_ai_ci文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-815024.html
SELECT t1.*
FROM test.table1 t1
inner join test.table2 t2 on t1.comment = t2.comment collate utf8mb4_0900_ai_ci
到了這里,關(guān)于Docker拉取mysql及utf8mb4_0900_ai_ci字符集解說(shuō)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!