MySQL学习笔记(8):字符集「终于解决」

MySQL学习笔记(8):字符集「终于解决」本文更新于2019-06-16,使用MySQL 5.7,操作系统为Deepin 15.4。 常用字符集 字符集 定长 代码宽度 说明 ASCII或ISO-646 是 1字节7位 英文字母、数字、标点符

MySQL学习笔记(8):字符集

本文更新于2019-06-16,使用MySQL 5.7,操作系统为Deepin 15.4。

常用字符集

字符集 定长 代码宽度 说明
ASCII或ISO-646 1字节7位 英文字母、数字、标点符号和33个控制符
ISO-8859系列 1字节8位 各西欧字符集,兼容ASCII
GB2312 1或2字节 兼容ASCII,不推荐使用
GBK 1或2字节 兼容GB2312
GB18030 1、2或4字节 兼容GBK
Unicode或UCS-4或ISO-10646 4字节 从最高字节起依次代表组(group)、面(plane)、行(row)、格(ceil),包括BMP、辅助字面和专用字面
UCS-2 2字节 UCS-4的0组0面,即基本多语言文字面(BMP)

Unicode有如下编码方式:

编码方式 定长 代码宽度 说明
UTF-8 1至6字节 兼容ASCII
UTF-16 2或4字节 BMP使用2字节表示,以外使用4字节表示,按字节序不同分为UTF-16BE和UTF-16LE
UTF-32 4字节 Unicode原始编码,按字节序不同分为UTF-32BE和UTF-32LE

UTF-8编码如下:

字节 代码位数 代码空间 字节组合
1 0-7 0x0 – 0x7f 0xxxxxxx
2 8-11 0x80 – 0x7ff 110xxxxx,10xxxxxx
3 12-16 0x800 – 0xffff 1110xxxx,10xxxxxx,10xxxxxx
4 17-21 0x10000 – 0x1fffff 11110xxx,10xxxxxx,10xxxxxx,10xxxxxx
5 22-26 0x200000 – 0x3ffffff 111110xx,10xxxxxx,10xxxxxx,10xxxxxx,10xxxxxx
6 27-31 0x4000000 – 0x7fffffff 1111110x,10xxxxxx,10xxxxxx,10xxxxxx,10xxxxxx,10xxxxxx

每个汉字,GBK使用2字节,UTF-8使用3字节。

MySQL字符集

MySQL的UTF-8字符集最大长度为3字节,只能表示BMP中的字符(0-0xffff)。若要使用大于3字节的字符(如emoji),则需使用utf8mb4字符集。

MySQL包含字符集和校对规则两个概念。校对规则用来定义比较字符串的方式,一种字符集至少有一种校对规则,但可以有多种校对规则。校对规则的命名以其相关的字符集名开始,中间通常包含一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(比较是基于字符编码的值而与语言无关)结束,如gbk_chinese_ci。

MySQL的字符集和校对规则有4个级别的设置:

  • 服务器级:可通过配置文件或启动选项设置,默认为latin1。
  • 数据库级:可通过CREATE DATABASEALTER DATABASE设置,如数据库中已存在记录,修改字符集不会将已有数据按照新的字符集进行存放。
  • 表级:可通过CREATE TABLEALTER TABLE设置,如表中已存在记录,修改字符集不会将已有数据按照新的字符集进行存放。
  • 字段级:可通过CREATE TABLEALTER TABLE设置,如表中已存在记录,修改字符集不会将已有数据按照新的字符集进行存放。

客户端和服务器交互时,还存在客户端、连接、返回结果的字符集和校对规则,通常这三者是相同的,才可以确保数据能被正确读取。可以通过SET NAMES charset同时修改这三个值。可以通过[_charset] "str" [COLLATE collation]强制字符串的字符集和校对规则。

已有记录的字符集调整,需先将数据导出,经过适当调整后重新导入。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7632.html

(0)
上一篇 2023-03-17
下一篇 2023-03-17

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注