字符集详解
大约 3 分钟
字符集详解
1. 什么是字符集?
字符集是一个 字符集合,它定义了可以使用的字符范围。
字符集包含字母、数字、符号和控制字符等,用于支持不同语言和地区的文字表示。
- 简单定义:字符集定义了哪些字符可以被存储和处理。
- 面试点:不同字符集之间的兼容性和支持范围的差异。
2. 什么是字符编码?
字符编码是将 字符集中的字符 转换为计算机可以理解的二进制形式的规则。
字符集 vs 字符编码:
- 字符集定义了有哪些字符。
- 字符编码定义了如何表示这些字符。
面试点:
- 同一个字符集可以有不同的编码方式。
- 如 Unicode 字符集可以用 UTF-8、UTF-16 等方式编码。
3. 常见的字符集
以下是一些常见的字符集及其特点:
| 字符集 | 描述 | 特点 |
|---|---|---|
| ASCII | 美国信息交换标准代码 | 7 位编码,128 个字符,主要用于英语。 |
| GB2312 | 中国国家字符集 | 仅支持简体中文,6763 个汉字,682 个符号。 |
| GBK | GB2312 的扩展 | 兼容 GB2312,支持约 2 万个汉字和符号。 |
| GB18030 | GBK 的进一步扩展 | 国家标准,支持少数民族文字,约 7 万个字符,向下兼容 GBK 和 GB2312。 |
| BIG5 | 繁体中文字符集 | 主要用于台湾和香港,约 1.3 万个汉字。 |
| Unicode | 全球字符集,支持多语言文字 | 包含全球大多数语言字符,独立于语言,解决了传统字符集的局限性。 |
| UTF-8 | Unicode 编码的一种 | 变长编码,使用 1-4 个字节表示字符,兼容 ASCII,广泛用于互联网。 |
- 面试点:UTF-8 和 GBK 的区别:
- UTF-8 是 Unicode 编码,全球通用。
- GBK 是中国特定字符集,主要用于本地化需求。
4. MySQL 中的字符集
4.1 查看支持的字符集
- 可以通过以下命令查看 MySQL 支持的字符集:
SHOW CHARSET; - 输出示例:
+---------+---------------+-------------------+--------+ | Charset | Description | Default collation| Maxlen | +---------+---------------+-------------------+--------+ | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | | latin1 | cp1252 West | latin1_swedish_ci| 1 |
4.2 MySQL 默认字符集
- MySQL 5.7 默认字符集为
latin1。 - MySQL 8.0 默认字符集为
utf8mb4,全面支持 Unicode。
4.3 字符集的层次级别
MySQL 的字符集支持多个层次的配置:
- 服务器级:设置全局默认字符集。
- 数据库级:特定数据库的默认字符集。
- 表级:特定表的字符集。
- 列级:特定列的字符集。
- 示例:配置表和列的字符集:
CREATE TABLE test ( id INT, name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
4.4 连接字符集
客户端与服务器的交互数据也受字符集影响,可以通过以下变量设置:
character_set_client:客户端发送的字符集。character_set_connection:服务器处理的字符集。character_set_results:结果集字符集。
示例:设置 UTF-8 连接字符集:
SET NAMES 'utf8';
5. JDBC 对连接字符集的影响
使用 JDBC 连接 MySQL 时,字符集设置至关重要,尤其是避免中文乱码。
在连接 URL 中指定字符集,例如:
String url = "jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf8";- useUnicode=true:表示使用 Unicode。
- characterEncoding=utf8:指定字符集为 UTF-8。
6. UTF-8 使用中的注意事项
MySQL 中的 utf8 和 utf8mb4 的区别:
- utf8:最多支持 3 字节,无法存储 Emoji 等 4 字节字符。
- utf8mb4:最多支持 4 字节,全面支持 Unicode。
建议:如果需要存储 Emoji 或特殊符号,推荐使用
utf8mb4。
面试可能的深入问题
什么是字符集的兼容性?
- 比如 UTF-8 兼容 ASCII,但与 GBK 不兼容。
为什么要选择 UTF-8?
- 全球化支持,兼容性好,变长编码节省空间。
MySQL 使用 utf8 的局限性?
- 无法存储 4 字节字符,建议升级到 utf8mb4。
如何处理字符集带来的性能影响?
- utf8mb4 比 utf8 占用更多存储空间,索引长度可能受限。
