MySQL高级二:字符集问题

字符集问题

概述
  1. MySQL8.0与MySQL5.7的字符集对比
    MySQL5.7MySQL8.0
    默认字符集:latin1默认编码:utf8mb4
  2. utf8 与 utf8mb4

    utf8 字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示 了。而字符集表示一个字符所用的最大字节长度,在某些方面会影响系统的存储和性能,所以设计 MySQL的设计者偷偷的定义了两个概念:

    utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符,MySQL5.7中的utf8就是指utf8bm3

    utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。

  3. 查询MySQL5.7中的各模块字符集

    在这里插入图片描述

  4. 查询MySQL8.0中的各模块字符集

    在这里插入图片描述

一、在MySQL5.7中修改字符集
  1. 在/etc/my.cnf文件内修改字符集

    在这里插入图片描述

  2. 设置后要重启mysql服务
    systemctl restart mysqld.service
    
  3. 查看修改后的字符集情况

    在这里插入图片描述

  4. 修改字符集后,再创建新的数据库及该数据库内数据表,里面的数据默认字符集就是utf8

    注意:已经创建的数据库、数据表,以及再原先数据库内创建新的数据表,其字符集还是latin1,不会改变

二、已有库&表的字符集的变更
  1. 已有数据库的字符集变更
    alter database dbtest1 character set 'utf8';
    

    在这里插入图片描述

  2. 已有数据表的字符集变更

    在这里插入图片描述

三、各级别的字符集
  1. 级别划分

    ① 服务器级别

    在/etc/my.cnf文件中修改

    ② 数据库级别

    CREATE DATABASE 数据库名
    [[DEFAULT] CHARACTER SET 字符集名称]
    [[DEFAULT] COLLATE 比较规则名称];
    
    ALTER DATABASE 数据库名
    [[DEFAULT] CHARACTER SET 字符集名称]
    [[DEFAULT] COLLATE 比较规则名称]
    

    ③ 表级别

    CREATE TABLE 表名 (列的信息)
    [[DEFAULT] CHARACTER SET 字符集名称]
    [COLLATE 比较规则名称]]
    
    ALTER TABLE 表名
    [[DEFAULT] CHARACTER SET 字符集名称]
    [COLLATE 比较规则名称]	
    

    ④ 列级别

    CREATE TABLE 表名(
    列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
    其他列...
    );
    
    ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
    
  2. 具体各模块的字符集
    show variables like ‘character%’名称
    1character_set_server服务器级别的字符集
    2character_set_database当前数据库的字符集
    3character_set_client服务器解码请求时使用的字符集
    4character_set_connection服务器处理请求时会把字符串从character_set_client
    转为character_set_connection
    5character_set_results服务器向客户端返回数据时使用的字符集
  3. 请求到相应过程中的字符集的变化(了解就ok)

    ① 客户端发送和接收请求所使用的字符集要和当前操作系统一致,即和character_set_client,character_set_results保持一致。

    ② 不同操作系统使用的字符集可能不一 样,

    类 Unix 系统使用的是 utf8

    Windows 使用的是 gbk

    ③ character_set_connection可以与发送/接收请求的字符集不一样,它只起到中间转换作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值