【MySQL】关于MySQL中的字符集?

2021/11/18 2:10:03

本文主要是介绍【MySQL】关于MySQL中的字符集?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  • 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;
    


这篇关于【MySQL】关于MySQL中的字符集?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程