MySQL 字符编码集中有两套 UTF-8 编码实现:utf8
和 utf8mb4
。
如果使用 utf8
的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。
什么是字符集 ?
字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。
字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。 字符集 就是一系列字符的集合。字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说有些字符集是无法表示汉字的。
计算机只能存储二进制的数据,那英文、汉字、表情等字符应该如何存储呢?
我们要将这些字符和二进制的数据一一对应起来,比如说字符“a”对应“01100001”,反之,“01100001”对应 “a”。我们将字符对应二进制数据的过程称为"字符编码",反之,二进制数据解析成字符的过程称为“字符解码”。
ASCII
ASCII (American Standard Code for Information Interchange,美国信息交换标准代码) 是一套主要用于现代美国英语的字符集(这也是 ASCII 字符集的局限性所在)。
为什么 ASCII 字符集没有考虑到中文等其他字符呢? 因为计算机是美国人发明的,当时,计算机的发展还处于比较雏形的时代,还未在其他国家大规模使用。因此,美国发布 ASCII 字符集的时候没有考虑兼容其他国家的语言。
ASCII 字符集至今为止共定义了 128 个字符,其中有 33 个控制字符(比如回车、删除)无法显示。
一个 ASCII 码长度是一个字节也就是 8 个 bit,比如“a”对应的 ASCII 码是“01100001”。不过,最高位是 0 仅仅作为校验位,其余 7 位使用 0 和 1 进行组合,所以,ASCII 字符集可以定义 128(2^7)个字符。
由于,ASCII 码可以表示的字符实在是太少了。后来,人们对其进行了扩展得到了 ASCII 扩展字符集 。ASCII 扩展字符集使用 8 位(bits)表示一个字符,所以,ASCII 扩展字符集可以定义 256(2^8)个字符。
常见的字符集有很多,其中最常用的是ASCII字符集。ASCII字符集包括了基本的英文字母、数字和符号,是计算机中最常用的字符集之一。其他常见的字符集包括:
GB2312字符集
GB2312是中国国家标准的汉字字符集,包括了简体中文字符集,总计有6763个汉字。该字符集是GB18030字符集的前身,主要用于简体中文的处理。
BIG5字符集
BIG5是中国台湾省使用的汉字字符集,总计有13053个汉字。BIG5也被广泛用于繁体中文的处理。
GB18030字符集
GB18030是中国国家标准的汉字字符集,是目前最新的版本。它包括了简体中文字符集、繁体中文字符集以及少数民族文字符集,总计有70244个汉字。GB18030字符集被广泛应用于中文信息处理领域。
Unicode字符集
Unicode是一种通用的字符集,旨在包含全世界所有语言的字符。它包括了多种不同语言的字符,包括中文、英文、日文、韩文等。Unicode字符集被广泛应用于计算机领域,支持多种不同的语言文字处理。
除了以上这些常见的字符集外,还有许多其他的字符集,例如ISO-8859-1、UTF-8、UTF-16等。这些字符集都有各自的特点和用途,根据不同的需求选择适合的字符集进行处理。
MySQL字符集
一、概述
MySQL字符集是MySQL中使用的字符编码方式,它决定了数据库、表和列中存储的数据的编码方式,也影响了查询和排序等操作的结果。了解MySQL字符集及其相关的概念和设置,对于正确使用和管理MySQL数据库至关重要。本文将详细介绍MySQL字符集的相关知识,包括字符集的概念、分类、设置和使用。
二、字符集概念
字符集是多个字符的集合,它定义了字符的编码方式。在MySQL中,每个字符集都有对应的校对规则,用于比较字符串的大小写、排序等操作。字符集的种类很多,包括ASCII、Latin、GBK、GB2312、Big5、UTF-8、UTF-16、UTF-32等。不同的字符集适用于不同的语言和场景,选择合适的字符集可以大大提高数据处理效率和准确性。
三、字符集分类
单字节字符集 单字节字符集是指每个字符只占用一个字节的字符集,如ASCII字符集。这种字符集的优点是兼容性好,适用于大多数场景。但是,由于编码空间有限,单字节字符集只能表示基本的英文字符和数字,无法表示多语言字符。
多字节字符集 多字节字符集是指每个字符占用多个字节的字符集,如UTF-8、UTF-16等。这种字符集可以表示多种语言字符,包括中文、日文、韩文等。多字节字符集的优点是支持多种语言,缺点是在处理大量数据时可能会占用更多的存储空间。
宽字符集 宽字符集是一种针对Unicode的可变长度字符编码,也称为万国码。它用1到6个字节编码Unicode字符,用在网页上可以同一页面显示中文简体繁体及其它语言(如英文、日文、韩文)。UTF-8是目前最常用的宽字符集之一。
四、MySQL字符集设置
在MySQL中,可以通过以下几种方式设置字符集:
创建数据库时设置字符集:在创建数据库时,可以使用CHARACTER SET关键字指定数据库的字符集,如:
代码语言:javascript复制CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
创建表时设置字符集:在创建表时,可以使用CHARACTER SET关键字指定表的字符集,如:
代码语言:javascript复制CREATE TABLE mytable (id INT, name VARCHAR(255)) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改数据库或表的字符集:可以使用ALTER DATABASE或ALTER TABLE语句修改数据库或表的字符集,如:
代码语言:javascript复制ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;