MySQL 字符集和校对集

Posted YuLong~W

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 字符集和校对集相关的知识,希望对你有一定的参考价值。

字符集

目标:了解字符集的概念,掌握mysql数据库存储数据的字符集逻辑以及设置方式

  • 字符集概念
  • MySQL字符集关系
  • 解决乱码问题
  • 字符集设置原理

字符集概念

字符集:charset或者character set,是各种文字符号在计算机中的总称

  • 字符集根据不同国家的符号不同,有不同的字符集
  • 不同的字符集占用的存储空间不一样,存储的底层也不一样
  • 不同字符集之间可以进行转换
  • 常见字符集
    • ASCII:美国信息交换标准码,一般英文符号,一个字节存储
    • latin1:拉丁文字符集,一个字节存储,ISO-8859-1的别名 ,能够向下兼容ASCII
    • GB2312:信息交换用汉字编码字符集 ,是中国1981年的一套国标规范,2个字节存储
    • GBK:汉字内码扩展规范(1995年),两个字节表示表示(汉字很多超过5000个)
    • Unicode:万国码(统一码),使用统一的编码方式来解决传统的局限,1994年出现
    • UTF-8:8-bit Unicode Transformation Format(万国码) ,针对Unicode的可变长度字符编码,采用1-6个字节编码Unicode字符(目前通用编码规则)。建议使用UTF-8字符集进行数据存储(MySQL8中建议使用utf8mb4

原理流程图:

1、数据存储

ASCII
GBK
ASCII 存储中文
输入符号
A
计算机存储
字符集选择
转码
01000001
转码
0000000001000001
转码
乱码
存储

2、数据读取

ASCII
GBK
UTF-8
数据读取
字符集选择
读1个字节
01000001
读2个字节
0000000001000001
读3个字节
错误读取
解析
乱码
解析
A
输出

小结

1、字符集是一套符号的总称

2、不同国家地区的符号有区别,所以有自己的字符集

3、常见的字符集目前是三个

  • ASCII:美国信息交换标准码
  • GBK:汉字内码扩展规范(国标),兼容ASCII
  • UTF-8:8字节万国码,兼容GBK和ASCII

4、目前基本都统一使用UTF-8 开发和数据存储

5、字符集是指定字符的存储和读取的规范

  • 指定的字符集存储需要使用对应的字符集读取
  • 错误的字符集存储或者读取都会产生乱码

MySQL字符集

MySQL字符集:MySQL内部对于数据实际存储的字符集(服务器端)

  • MySQL内部对象可以在各个层级设置字符集
  • MySQL内部对象存在字符集继承:字段 -> 表 -> 数据库 -> DBMS
  • MySQL内部内嵌支持几乎所有主流字符集
  • 数据存储的最终字符集由字段控制
  • 客户端与服务器进行交互时,需要明确告知服务器客户端自己的字符集(数据格式)

查看MySQL支持的所有字符集show charset;

原理图:

1、数据库内部对象字符集原理

以上是关于MySQL 字符集和校对集的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 字符集和校对集

MySQL字符集与校对集详解

数据库的字符集和校对集

20141230 mysql数值类型和列属性一

mysql数据库的基本操作(增删改查字符集校对集)

MySQL基本操作