讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么在MySQL中根据中文拼音首字母进行字段排序?

风芳同学_9885

风芳同学_9885

发布时间:2026-08-16 09:47:37

|

861人浏览过

|

来源于php中文网

原创

纯原生MySQL(8.0及以下)无法直接按拼音首字母排序,必须用变通方案:如CONVERT(name USING gbk)配合gbk_chinese_ci近似实现分组,或在应用层生成first_letter字段后排序。

怎么在mysql中根据中文拼音首字母进行字段排序?

MySQL 中文拼音首字母排序依赖字符集和排序规则

MySQL 本身不内置拼音转换函数,ORDER BY 直接对中文字段排序时,实际按字符编码(如 UTF8MB4 的 Unicode 码点)进行,结果是部首或笔画顺序,不是拼音。要实现“按拼音首字母排序”,必须让数据库能识别每个汉字对应的拼音首字母——这通常靠 CONVERT() + 合适的 collation,或借助自定义映射表/函数。

关键前提是:字段字符集必须是 utf8mb4,且排序规则需支持拼音等效(如 utf8mb4_unicode_ci 不行,它按 Unicode 排;utf8mb4_pinyin_ci 是第三方扩展,原生 MySQL 不带)。

所以,**纯原生 MySQL(8.0 及以下)无法直接按拼音首字母排序,必须用变通方案**。

用 CONVERT() + utf8mb4_general_ci 实现近似拼音首字母排序

utf8mb4_general_ci(已弃用但仍可用)和 utf8mb4_unicode_520_ci 在某些版本中对常用汉字的排序接近拼音顺序,但不可靠。更可控的做法是用 CONVERT() 将中文转为 GBK 编码再取首字节——因为 GBK 中汉字按拼音顺序排列,首字节范围可大致区分首字母。

SELECT name FROM users 
ORDER BY CONVERT(name USING gbk) COLLATE gbk_chinese_ci;

这个写法在 MySQL 5.7+、字段为 utf8mb4 时有效,但要注意:

  • CONVERT(name USING gbk) 可能失败(含 emoji 或超出现代 GBK 范围的字),会转成 ?,导致排序错乱
  • gbk_chinese_ci 是 MySQL 内置 collation,保证 GBK 字符按拼音分组,但「分组」不等于「首字母提取」,它只是让「啊、阿、哎」挨在一起,不是按 A/B/C 拉出完整字母序列
  • 若只要分组显示(比如前端做 A-Z 分类导航),这个方案够用;若要 WHERE first_letter = 'W' 精确过滤,则不适用

真正按拼音首字母筛选或排序:加辅助列 + 触发器或应用层处理

最稳定的方式是把拼音首字母存在额外字段里,由应用或数据库维护:

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 应用层(Python/Java)用 pypinyin 或 hanyu-pinyin 库生成首字母,插入/更新时一并写入 first_letter 字段
  • 数据库层可用触发器(MySQL 5.7+ 支持),但需自行实现拼音逻辑(无内置函数),实际极少这么做

建表示例:

ALTER TABLE users ADD COLUMN first_letter CHAR(1) GENERATED ALWAYS AS (
  UPPER(LEFT(
    CASE LEFT(name, 1)
      WHEN '吖' THEN 'A' WHEN '八' THEN 'B' WHEN '擦' THEN 'C'
      -- …… 手动映射前 100 个高频字(不现实)
    END, 1))
) STORED;

手动映射不可维护。因此生产环境强烈建议在写入时由业务代码计算 first_letter 并存入普通字段,然后直接 ORDER BY first_letter, name。

MySQL 8.0+ 用户注意 collation 变更与潜在陷阱

MySQL 8.0 默认 collation 改为 utf8mb4_0900_as_cs,它严格区分大小写和重音,但完全不考虑拼音。哪怕你执行:

SELECT * FROM users ORDER BY name COLLATE utf8mb4_0900_as_cs;

结果仍是 Unicode 码位顺序,和拼音无关。

另外两个常见误区:

  • 误以为 utf8mb4_unicode_ci 支持拼音:它只对拉丁扩展字符(如 é, ñ)有重音感知,对中文就是逐码点比较
  • 用 SUBSTRING(name, 1, 1) 提取首字再试图排序:没用,因为单个汉字还是按码点排,不是按拼音

真正需要首字母能力的场景,别在 SQL 层硬扛。复杂点在于:拼音存在多音字(如「重庆」的「重」读 chóng 不读 zhòng),而数据库无法上下文感知——这事只能由业务逻辑决定。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2193

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1339

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

775

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2992

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5048

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1139

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5311

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4662

2023.08.14

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

80

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 184人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn