MySQL 5.7 与 utf8mb4

为支持完整的 Unicode(包括 emoji),数据库应使用 utf8mb4 而非 utf8

配置方法

my.cnf 中:

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

Django 侧配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

注意事项

  1. utf8mb4 单字符最长 4 字节,索引列长度需 ≤ 191(对于 InnoDB 默认 row_format)
  2. STRICT_TRANS_TABLES 让数据截断时报错而非静默,避免数据丢失
  3. 迁移前确保所有表已转换字符集