# 字符集与排序规则

URL: https://caijiao.org/mariadb/database/charset-collation
Source: docs/mariadb/database/charset-collation.md
Description: 本节介绍 MariaDB 中字符集与排序规则的概念及配置方法，讲解如何设置合适的字符集和排序规则以确保数据存储和查询的正确性。

字符集（Character Set）定义了数据库中允许存储的字符范围，排序规则（Collation）则决定字符比较和排序的方式。

## 1. 常用字符集

- `utf8mb4`：支持完整的 Unicode 字符集，推荐使用，适合多语言环境。
- `latin1`：单字节字符集，适合西欧语言，不支持多字节字符。

## 2. 查看服务器默认字符集与排序规则

```sql
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
````

## 3. 设置数据库字符集与排序规则

创建数据库时，可以指定字符集和排序规则：

```sql
CREATE DATABASE dbname
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
```

## 4. 修改已有数据库字符集与排序规则

```sql
ALTER DATABASE dbname
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
```

## 5. 设置表和列的字符集

创建表时可指定字符集：

```sql
CREATE TABLE table_name (
  id INT,
  name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```

也可以单独为列设置：

```sql
name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```

## 6. 常见排序规则说明

* `utf8mb4_general_ci`：不区分大小写的通用排序，性能较好。
* `utf8mb4_unicode_ci`：遵循 Unicode 标准，支持更准确的语言排序规则，但性能略低。

---

正确配置字符集和排序规则，能避免乱码和排序异常，确保数据的准确存储和检索。
