-
MySQL支持哪些字符集?
我们可以通过输入以下命令进行查看
SHOW CHARACTER SET
上图查询结果中的MaxLen列,其含义表示的是该字符集中表示一个字符最多需要的字节数。通过上图红框,我们可以看出MySQL中的utf8字符集、utf8mb4字符集的MaxLen值分别为3、4。而我们知道实际在utf8字符集中,其需要1~4个字节来表示一个字符。那为啥MySQL下的utf8字符集却最多只需3个字节呢?原因在于MySQL中一个字符所用的最大字节长度有时可能会对存储、性能等方面造成影响,故早期MySQL设计者对于utf8字符集的支持只到3个字节长度的字符,即其对于utf8中需要4个字节表示的字符是不支持的。故MySQL中的utf8字符集又被称之为utf8mb3字符集(most bytes 3) 。通常3字节的utf8字符已经能够满足绝大多数场景的需要了。但对于一些特殊场景,如emoji表情在实际的utf8字符集中就需要4个字节来表示。为此MySQL从5.5.3版本开始,提供了utf8mb4字符集,其是utf8(utf8mb3)的超集,将utf8字符的支持拓展到4字节。故utf8mb4才是我们真正意义上的utf8字符集。
-
MySQL支持哪些排序规则(Collation) ?
我们在创建数据库的时候除了会设置字符集还会选择一个叫Collation的东西,我们通常叫它排序规则。
我们可以通过输入以下命令进行查看
SHOW COLLATION
在MySQL中,一个字符集下可以支持多个比较规则,而一个比较规则却只关联一个字符集。故比较规则的命名是以其所关联的字符集名称开头,即名称utf8_general_ci中的"utf8"表示该比较规则只能在utf8字符集下才可以使用。当然该关联性也可以从Charset列看出。名称中间的部分表示该比较规则以哪种语言的规则进行比较,例如utf8_croatian_ci规则的"croatian"表示克罗地亚语,则该比较规则是以克罗地亚语的规则进行比较。这里名称utf8_general_ci中的"general"表示其是一种通用的规则。而名称中的"ci"后缀则意为该比较规则不区分大小写。下面列出了常见后缀的含义。上图Default列如果为YES,则表示该比较规则是其所关联的字符集的默认比较规则,即utf8_general_ci是MySQL中utf8字符集默认的比较规则.
MySQL中的字符集、比较规则有四个级别——即服务器级别、数据库级别、表级别、列(字段)级别。其作用范围正如其名,依次降低分别为MySQL服务、数据库、表、列(字段)。某个级别如果没有显式指定字符集和比较规则,则会用上一个级别的字符集和比较规则的设定。比如,创建表时若未指定字符集和比较规则,则该表会继承使用其所在数据库的字符集、比较规则配置
我们知道在一个字符集下其可能对应有多个比较规则,并且其中有一个比较规则是该字符集的默认比较规则,故当我们仅显式的配置字符集而未指定比较规则时,则会使用该字符集对应的默认比较规则;而对于一个比较规则而言,其只可能关联一个字符集,故当我们仅显式的配置比较规则而未指定字符集时,则会使用该比较规则所关联的字符集
-
查看表的字符集
SHOW CREATE TABLE xxxx;
相关文章
- 08-15DWZ中关于iframeCallback和validateCallback的注意事项
- 08-15浅析TypeScript中const和readonly的区别、枚举和常量枚举的区别以及关于typescript中枚举的相关知识
- 08-15关于Mac中vscode无法从控制台输入的问题
- 08-15关于xfce中桌面没法显示回收站以及thunar中无法进行卷管理的解决办法
- 08-15关于sql中in 和 exists 的效率问题,in真的效率低吗
- 08-15关于xml中自动提示功能的设置
- 08-15OpenGL 中关于ImageTexture使用中遇到的两个问题 —— 快速清空 与 读写错误
- 08-15关于STL中iota()函数的使用
- 08-15关于在Servelet中如何获取当前时间的操作
- 08-15[转]关于微信JSSDK中遇到的“invalid signature”的天坑