大家好,今天由我来为大家分享数据库 db,以及数据库 db的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,接下来我们开始吧!
字符集(Character Set)
定义了字符如何编码为字节,例如:utf8mb4:用 1~4 字节表示 Unicode 字符latin1:单字节编码,支持西欧字符
排序规则(Collation)
定义了字符如何比较和排序,例如:utf8mb4_general_ci:不区分大小写(case-insensitive)utf8mb4_bin:按二进制值比较(区分大小写、区分重音)*** 每个字符集可以有多个 Collation,但每个 Collation 只属于一个字符集。MySQL 常见字符集(编码规则)列表
最大字节/字符
utf8mb4
1~4 字节
完整 Unicode(含 emoji、生僻字)
√强烈推荐
现代标准,MySQL 8.0+ 默认
utf8mb3(或 utf8)
1~3 字节
仅 BMP(U+0000–U+FFFF)
不支持 emoji,是历史遗留
utf16 / utf16le
2 或 4 字节
完整 Unicode
存储效率低,有字节序问题
utf32
固定 4 字节
完整 Unicode
浪费空间,无优势
1~2 字节
仅限繁体环境
非 Unicode,国际化差
ascii
ASCII(0–127)
仅英文数字符号
latin1
西欧语言(ISO 8859-1)
仅限旧系统
无法存中文、emoji
utf8mb4 是唯一推荐用于新项目的字符集。utf8 在 MySQL 中 = utf8mb3 ≠ 标准 UTF-8!常见utf8mb4排序规则(Collation)对比
Collation
区分大小写
utf8mb4_general_ci
否(如 é = e)
旧版默认,简单场景
utf8mb4_unicode_ci
是(遵循 Unicode 标准)
多语言、准确性要求高
utf8mb4_0900_ai_ci
否(Accent Insensitive)
MySQL 8.0+ 默认
utf8mb4_0900_as_cs
是(Accent Sensitive, Case Sensitive)
需精确匹配(如密码哈希字段)
utf8mb4_bin
快(直接比字节)
二进制比较、区分大小写
后缀含义:_ci = case insensitive_cs = case sensitive_ai = accent insensitive_as = accent sensitive_bin = binary comparison查看 MySQL 支持的字符集和 Collation
-- 查看所有字符集SHOW CHARACTER SET;
-- 查看某个字符集的所有 CollationSHOW COLLATION WHERE Charset = 'utf8mb4';
-- 查看当前数据库/表/列的字符集SHOW CREATE DATABASE db_name;SHOW CREATE TABLE table_name;设置字符集与 Collation 的层级
MySQL 支持在多个层级设置编码:
my.cnf 配置
character-set-server = utf8mb4
CREATE DATABASE

CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
CREATE TABLE
CREATE TABLE t (...) CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
CREATE TABLE
name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
SET NAMES utf8mb4; 或 JDBC 参数 ?useUnicode=true&characterEncoding=utf8mb4
--最佳实践:全链路统一使用 utf8mb4 + 合适的 Collation(如 utf8mb4_0900_ai_ci)应该用什么
utf8mb4
排序规则(通用)
utf8mb4_0900_ai_ci(MySQL 8.0+)或 utf8mb4_unicode_ci(5.7 及以下)
需要区分大小写
用 utf8mb4_0900_as_cs 或 utf8mb4_bin
绝对不要用
utf8(= utf8mb3)、latin1(除非明确兼容需求)
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!