Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说

这篇具有很好参考价值的文章主要介绍了Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

主旨是为了研究mysql里的字符集,在实践中发现中文的排序顺序有点问题,为了能让中文排序正常,尝试更改各种字符集做测试。

Mysql官方版本8.0以前默认的应该是latin1,8.0后默认为utf8mb4了

Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说,数据库,docker,mysql,容器Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说,数据库,docker,mysql,容器

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

字符集配置

官方相关手册说明:MySQL :: MySQL 8.0 Reference Manual :: 10.2 Character Sets and Collations in MySQL

我们可以使用几个命令查看

SELECT version();  #查看数据库版本
SHOW CHARACTER SET;  #查看数据库字符集
SHOW COLLATION WHERE Charset = 'utf8mb4';  #查看utf8mb4里可用的collation
SHOW VARIABLES LIKE 'character_set%';  #查看系统里对象的默认字符集
SHOW VARIABLES LIKE 'collation_database%'; #查看数据库的默认collation

Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说,数据库,docker,mysql,容器

utf8mb4utf8 的一个超集,就是可以多存放一些类型,比如表情符号,是Mysql8后的推荐的字符集,最大支持长度4个字节,最小占用存储长度还是1个字节,utf8的边码规则和原理可以查看我的同名博客文章 ASCII、Unicode、UCS-2、UTF-8互转

 排序规则说明

我们查看utf8mb4下面其实会有很多排序规则可以选择

Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说,数据库,docker,mysql,容器

以上这些规则具体选用哪一个,选择的依据是是什么呢

以默认的这个 utf8mb4_0900_ai_ci 示例说明

● 0900 是指 UCA 9.0.0标准。其中 UCA是 Unicode Collation Algorithm的缩写,UCA 9.0.0标准可以参考( 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说明

官方这一块的说明: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

 aias是相对的,是否区分重音的意思,对于中国场景其实是用不到的,比如 Cafe和Café,一个头上有音标一个没有音标这种。

cics是相对的,是否大小写敏感,如果是ci场景,hengrui=Hengrui,如果是cs场景 hengrui≠Hengrui

ks 是日语里假名的意思 かな(kana)

还有带地域的 utf8mb4_zh_0900_as_cs

● zh是中文的意思

这一块简写可以参考下表,官方地址: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

注意点

在不同字符排序规则之间做比较系统是会报错的,所以建议在设计数据库的时候就设定好

报错示例

Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说,数据库,docker,mysql,容器

如果历史因素必须出现不同字符排序,可以手动声明规则,示例:collate utf8mb4_0900_ai_ci文章来源地址https://www.toymoban.com/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

到了这里,关于Docker拉取mysql及utf8mb4_0900_ai_ci字符集解说的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包