MySQL选择字符集和排序规则

MySQL选择字符集和排序规则:utf8mb4 是当前绝大多数新项目的主流选择。

🌍 utf8mb4:主流之选

utf8mb4 是目前最通用、最能"一劳永逸"的字符集。

  • 为什么选它?
    • 完整支持Unicode :它是真正的UTF-8,支持几乎所有语言字符,包括中文生僻字和 emoji 表情 。而MySQL里老旧的 utf8 字符集只是个"阉割版",存不了emoji和部分生僻字。
    • 与时俱进:MySQL 8.0+ 已将它设为默认字符集,代表着未来的技术趋势。

⚖️ 排序规则对比

选定字符集后,需要选择合适的排序规则(Collation),它影响字符的比较和排序方式。

对于推荐字符集 utf8mb4,官方推荐和社区实践主要集中在以下几种:

排序规则 (Collation) 特点与适用场景 推荐程度
**utf8mb4_unicode_ci ** 遵循Unicode标准的排序规则,对中文按拼音、部首排序更准确;性能足够现代应用。 (优先)强烈推荐
utf8mb4_general_ci 实现简单,速度通常稍快,但中文排序可能不准(如"张"排到"李"前面)。 ⚠️ 已过时,自MySQL 8.0起已不推荐使用。
utf8mb4_0900_ai_ci MySQL 8.0+ 的默认排序规则,基于Unicode 9.0标准,最推荐。 MySQL 8.0+ 首选
utf8mb4_bin 二进制排序,严格区分大小写和字符('a''A'),常用于用户名、密码等需精确匹配的字段。 ⚠️ 特定场景
gbk_chinese_ci gbk字符集的默认排序规则,适用于专注中文的老项目。 ⚠️ 特定场景

🛠️ 配置与避坑指南

  • 数据库配置

    • 创建数据库时CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    • 已有数据库迁移 :分别修改数据库、表和列的字符集。

      sql 复制代码
      ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
      ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • JDBC连接 :确保在JDBC URL中指定了UTF-8编码。

    java 复制代码
    jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=UTF-8
  • 全局设置 :可在配置文件 my.cnfmy.ini 中设置。

    ini 复制代码
    [client]
    default-character-set = utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
相关推荐
名字还没想好☜7 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
ltl7 小时前
Serverless 数据库弹性理论:Neon 与 Aurora Serverless v2
数据库
Dxy12393102168 小时前
Python 如何使用 MySQL 的事务
python·mysql
marvelyu11 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
ZCBUS实时计算12 小时前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
zd20057212 小时前
海洋微生物数据库
数据库·宏基因组
海上小飞龙12 小时前
Redis 分布式锁原理:从 SET NX EX 到 Redisson 看门狗
数据库·redis·分布式
xiaoye-duck13 小时前
MySQL 表约束全解:从基础约束到外键关联规则
数据库·mysql
Hammer_Hans13 小时前
DFT笔记98
java·开发语言·数据库
迪康Defender14 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他