数据库 db(MySQL 中字符编码规则)

数据库 db(MySQL 中字符编码规则)

大家好,今天由我来为大家分享数据库 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

数据库 db(MySQL 中字符编码规则)

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,本文到此结束,如果可以帮助到大家,还望关注本站哦!

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有