MySQL运维实战(5.1) 字符和编码的基本概念

俊达2年前技术文章764

字符和编码

  • 字符

字符是符号,是人们用于交流的各类符号,如26个英文字母、汉字、标点符号、数学运算符、其他语言的字母和符号。

  • 编码

编码是计算机中以二进制方式存储字符的方式。

  • 字符集

字符集是字符和编码的映射表。如何将字符以二进制的方式存储,以及如何将二进制数据还原成人们认识的符号(字符),字符集起了关键的作用。


常见的字符集

ascii

单字节。使用00~7F,总共128个字符。

ascii.png

GBK

1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。

GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

gbk编码表可以从网上找到,如:https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php


下图是部分汉字的GBK编码:


gbk.png



Unicode

Unicode(统一码)是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

Unicode的编码方式

utf8

使用变长的方式编码unicode字符。使用1-4个字节来编码。

utf8.png


汉字使用UTF8编码占用3个字节。




一些例子


我们可以借助Python(这里用的是python 2.7),方便地观察字符的编码和解码。


汉字“中国”的GBK编码是 D6D0 B9FA

>>> u"中国".encode('gbk')
'\xd6\xd0\xb9\xfa'


汉字“中国”的UTF8编码是 E4B8AD E59BBD

>>> u"中国".encode('utf8')
'\xe4\xb8\xad\xe5\x9b\xbd'


汉字“中国”的Unicode是 4E2D 56FD

>>> u"中国"
u'\u4e2d\u56fd'


数据E4B8ADE59BBD以UTF8编码解码,得到汉字字符“中国”的Unicode

>>> '\xe4\xb8\xad\xe5\x9b\xbd'.decode('utf8')
u'\u4e2d\u56fd'


数据E4B8ADE59BBD以GBK编码解码:

-- ADE5不是合法的GBK编码,默认情况下报错
>>> '\xe4\xb8\xad\xe5\x9b\xbd'.decode('gbk')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence


-- 忽略解码时的错误,得到3个Unicode字符
>>> '\xe4\xb8\xad\xe5\x9b\xbd'.decode('gbk', errors='replace')
u'\u6d93\ufffd\u6d57'


-- 看起来像乱码。其中”?“是因为GBK无法解码ADE5,使用默认字符替换得来。
>>> print u'\u6d93\ufffd\u6d57'
涓�浗


产生乱码的一个原因是解码时使用的字符集不对。













相关文章

MySQL运维实战之备份和恢复(8.6)将数据库恢复到指定时间点

恢复到指定时间点使用全量备份和增量备份文件,都只能将数据库恢复到备份结束的时间。通过binlog,可以将数据库恢复到任意时间点(前提是备份和该时间点之间的binlog都存在)。找到时间点对应的binl...

MySQL优化器特性(八)索引范围扫描成本计算

MySQL优化器特性(八)索引范围扫描成本计算

range执行计划中的range表示索引范围扫描。索引范围扫描的执行过程大致如下:1、根据where条件中索引字段的条件,定位到索引结构中的第一条满足条件的记录。2、根据索引中记录的rowid,到表中...

MySQL运维实战之备份和恢复(8.1)xtrabackup全量备份

xtrabackup是percona开源的mysql物理备份工具。xtrabackup 8.0支持mysql 8.0版本的备份和恢复。xtrabackup 2.4支持mysql 5.7及以下版本的备份...

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

我们在生产环境部署mysql时,一般很少使用rpm。用rpm或或者其他包管理器安装mysql,好处是安装简单,而且很多系统可能都自带了某个版本的mysql。但是使用RPM安装也存在一些缺点:1、rpm...

 MySQL运维实战(1.3)安装部署:源码编译安装

MySQL运维实战(1.3)安装部署:源码编译安装

源码编译安装通常不需要自己编译mysql源码,编译的mysql和二进制包的内容基本一致。当然有些时候可能会需要采用源码编译的方式安装,安装一些非标准版本的mysql安装一些社区的patch、bugfi...

MySQL运维实战(4.1) MySQL表存储引擎

MySQL表的特点和其他数据库如Oracle、SQL Server相比,mysql有一些特点:MySQL使用插件式存储引擎,同一个数据库中的表可以使用不同的存储引擎。存储引擎决定了表的物理存储格式。表...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。