数据库字符集与排序规则对照
适用人群:遇到中文 / Emoji 乱码,或需要正确设置数据库字符集的站长与开发者。
核心概念
关键概念
- 字符集(Charset):字符如何编码存储,决定能存哪些字符。
- 排序规则(Collation):字符如何比较和排序,决定
=、ORDER BY的行为(是否区分大小写 / 重音)。
常用字符集对照
| 字符集 | 每字符字节 | 能否存 Emoji | 说明 |
|---|---|---|---|
| utf8mb4 | 1–4 | 能 | 推荐,真正的完整 UTF-8 |
| utf8 (utf8mb3) | 1–3 | 不能 | MySQL 的历史遗留,存 Emoji 会报错 |
| latin1 | 1 | 不能 | 存中文乱码,避免使用 |
常用排序规则
| 排序规则 | 特点 |
|---|---|
| utf8mb4_unicode_ci | 不区分大小写,通用性好 |
| utf8mb4_0900_ai_ci | MySQL 8 默认,速度快、不区分重音 |
| utf8mb4_bin | 按二进制比较,区分大小写 |
实际示例
建库 / 建表指定 utf8mb4
CREATE DATABASE app DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE posts (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
查看与修改现有库表字符集
-- 查看
SHOW VARIABLES LIKE 'character_set_%';
SHOW CREATE TABLE posts;
-- 将已有表转换为 utf8mb4
ALTER TABLE posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
连接层也要用 utf8mb4,否则仍可能乱码:
# my.cnf
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
常见错误
- ⚠️用 MySQL 的 `utf8`(实为 utf8mb3)存 Emoji,插入时报 “Incorrect string value” 错误
- ⚠️库 / 表 / 连接三处字符集不一致,数据存进去正常、读出来乱码
- ⚠️只改了字符集没改排序规则,导致大小写敏感行为不符合预期
对应工具
常见问题
utf8 和 utf8mb4 到底有什么区别?
已有数据的表能安全转成 utf8mb4 吗?
相关教程
相关文章
备案站点的数据库运维与高可用要点
数据库在备案站点里的位置 备案网站的用户、内容、线索几乎都存在数据库里,是最核心的资产。数据库一旦宕机,站点直接不可用;数据一旦损坏或丢失,损失往往不可逆。所以数据库运维是稳定运营的地基。 高可用:主从与故障切换 主从复制:主库写、从库读,读写分离分担压力。 故障切换:主库异常时能自动或快速切到从库,减少不可用时间。…
备案站点的数据库变更与在线 DDL 实践
一次 ALTER TABLE 就能让站点不可用 同样一条加字段语句,在几千行的小表上几十毫秒结束,在千万级大表上可能锁住几分钟甚至更久。锁住期间读写全部阻塞,请求迅速堆积、连接池打满,最终整站雪崩——很多"莫名其妙的宕机"根因就是一次看似无害的表结构变更。数据库的日常运维见 数据库运维与高可用。 关键要点 大表 DD…
纯静态网站没有后台数据库要不要备案
静态和动态不是备案判断的标准 有观点认为,纯静态网站没有数据库、不涉及用户注册和数据存储,风险较低,因此不用备案。这种理解是不准确的。ICP备案关注的是是否使用域名、通过互联网向公众提供信息服务,与网站是否使用数据库、是否为动态站点没有直接关系。无论是一个纯HTML展示页,还是复杂的动态系统,只要部署在境内服务器并用…
网站数据库运维怎么做?选型、性能优化、主从与备份全解析
对大多数网站,数据库是最核心、也最难重建的资产:程序挂了能重启,数据库数据丢了或被拖慢,整站跟着崩。数据库运维不是"装完能用就行",而要在选型、性能、可靠性、安全四条线上持续投入。本文系统梳理网站数据库运维的关键点。 选型:关系型还是其它 大多数网站用关系型数据库(MySQL/MariaDB、PostgreSQL)就…
网站长期闲置未更新是否有备案风险
一些企业完成备案后,网站长期停留在初版内容甚至处于近乎空白的状态,没有持续更新维护。这类闲置网站虽然不一定直接违规,但在信息核实环节容易引起额外关注。 闲置网站常见的表现 网站长期显示“建设中”或仅有极少页面; 网站内容与备案登记的服务类型明显不符或过于简单; 服务器长期未续费,网站时常无法访问。 可以先用 网站可用…
官方资料来源