zoukankan      html  css  js  c++  java
  • 第六节:MySQL字符集和排序规则详解

    一. 相关概念

     1. 字符集

     MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL实例的交互相关,排序规则和字符串的对比规则相关

    (1). 字符集的设置可以在MySQL实例、数据库、表、列四个级别

    (2). MySQL设置字符集支持在InnoDB, MyISAM, Memory三个存储引擎

    (3). 查看当前MySQL支持的字符集的方式有两种,一种是通过查看information_schema.character_set系统表,一种是通过命令【 show character set; 】查看。

    2. 排序规则

     每个指定的字符集都会有一个或多个支持的排序规则,可以通过两种方式查看,一种是查看information_schema.collations表,另一种是通过【show collation】命令查看

    (1).  查看utf8mb4字符集对应的排序规则有哪些。

    show collation where charset ='utf8mb4';

    (2).剖析排序规则 

     排序规则的命令通常是以对应的字符集的名字为开头,并以自己的特定属性结尾,比如排序规则utf8_general_ci和latin1_swedish_ci就分别是对应utf8和latin1字符集的排序规则

    • 当排序规则特指某种语言时,则中间的部分就为这种语言的名字,比如utf8_turkish_ci和utf8_hungarian_ci就代表UTF8字符集中的土耳其语和匈牙利语

    • 排序规则名字的结尾字符代表是否大小写敏感,重音敏感以及是否是二进制的

     

     PS:

    A. 当仅指定了字符集而没有指定排序规则时,则会使用该字符集的默认排序规则

    B. 当仅指定了排序规则而没有字符集时,则在该排序规则名称上含有的字符集会被使用

    C. 当数据库创建时没有指定这两项,则使用实例级别的字符集和排序规则

    二. 实操

    1. 查看数据库编码

     windows下mysql5.7默认编码如下图

    show variables like '%character%';

    PS:

    (1). 每个数据库客户端连接都有自己的字符集和排序规则属性,客户端发送的语句的字符集是由character_set_client决定,而与服务端交互时会根据character_set_connection和collation_connection两个参数将接收到的语句转化。当涉及到显示字符串的比较时,由collation_connection参数决定,而当比较的是字段里的字符串时则根据字段本身的排序规则决定

    (2). character_set_result 参数决定了语句的执行结果以什么字符集返回给客户端

    (3). 客户端可以很方便的调整字符集和排序规则,比如使用SET NAMES'charset_name' [COLLATE 'collation_name']表明后续的语句都以该字符集格式传送给服务端,而执行结果也以此字符集格式返回。

    SET character_set_client = utf8mb4;
    SET character_set_results = utf8mb4;
    SET character_set_connection = utf8mb4;

     2. 安装完MySQL后的通用配置

     MySQL5.7以后,推荐使用utf8mb4编码来代替utf8编码。

     无论window下还是linux下的mysql安装完成后首先要做的就是修改编码,下面蓝色部分是需要配置的。修改完成后,重启mysql服务,查看编码。

    [client]
    default-character-set=utf8mb4
    [mysql] default-character-set=utf8mb4
    [mysqld] # 设置client连接mysql时的字符集,防止乱码 init_connect='SET NAMES utf8mb4' init_connect='SET collation_connection = utf8mb4_general_ci'
    # 数据库默认字符集 character-set-server
    =utf8mb4
    #数据库字符集对应一些排序等规则,注意要和character-set-server对应 collation-server
    =utf8mb4_general_ci
    # 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置 (忽略即可) #skip-character-set-client-handshake
    # 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!(忽略即可) #skip-name-resolve

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    docker-compose写法收集
    【CodeForces】704 C. Black Widow 动态规划+模拟
    【BZOJ】2693: jzptab 莫比乌斯反演
    【BZOJ】2154: Crash的数字表格 莫比乌斯反演
    【CodeForces】915 G. Coprime Arrays 莫比乌斯反演
    【CodeForces】915 F. Imbalance Value of a Tree 并查集
    【CodeForces】915 E. Physical Education Lessons 线段树
    【CodeForces】915 D. Almost Acyclic Graph 拓扑排序找环
    【Atcoder】AGC 020 B
    【Atcoder】AGC 020 D
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/13997743.html
Copyright © 2011-2022 走看看