mysql如何使用substring提取子串_mysql字符串截取方法-mysql教程

mysql的substring函数有三种等价写法:substring(str, pos)、substring(str from pos)、substring(str, pos, len),位置pos从1开始;默认按字符截取,需确保字符集为utf8mb4;substr是其完全同义词;提取邮箱用户名等场景应优先使用substring_index而非组合locate+substring。

MySQL 的 SUBSTRING 函数怎么用?基本语法和参数顺序别搞反

SUBSTRING 在 MySQL 中有三种等价写法:SUBSTRING(str, pos)、SUBSTRING(str FROM pos)、SUBSTRING(str, pos, len)。注意:位置 pos 从 1 开始(不是 0),这点和多数编程语言不同,容易导致截取错位。

常见错误是把起始位置当成了 0 基索引,比如想取第 2 个字符却写了 SUBSTRING('abc', 0, 1),结果返回空字符串 —— 因为 MySQL 把负数或 0 当作无效起始点,部分版本甚至静默返回 NULL。

  • SUBSTRING('hello', 2) → 'ello'(从第 2 个字符开始到末尾)
  • SUBSTRING('hello', 2, 3) → 'ell'(从第 2 个开始,取 3 个字符)
  • SUBSTRING('hello' FROM 2 FOR 3) → 等价于上一条,FOR 是可选关键字

遇到中文或 UTF8 字符时,SUBSTRING 按字节还是按字符截?

MySQL 的 SUBSTRING 默认按「字符」截取,前提是列的字符集是 utf8mb4 且排序规则支持多字节字符(如 utf8mb4_unicode_ci)。但如果连接或会话的 character_set_client 设置不一致,可能触发隐式转换,导致中文被截成乱码或半个字符。

验证方式:执行 SELECT LENGTH('你好'), CHAR_LENGTH('你好');。若前者返回 6(UTF8MB4 下每个汉字占 3 字节)、后者返回 2,说明 CHAR_LENGTH 才是真实字符数,而 SUBSTRING 内部依赖的是 CHAR_LENGTH 逻辑 —— 所以它切的是字符,不是字节。

  • 确保表字段用 utf8mb4,避免用过时的 utf8(实际只支持最多 3 字节)
  • 避免在 WHERE 条件中对大字段用 SUBSTRING 做模糊匹配,无法走索引
  • 如果必须按字节截(极少见),得先转成二进制:SUBSTRING(CAST(col AS BINARY), 5, 2)

SUBSTR 和 SUBSTRING 有什么区别?可以混用吗?

完全一样。SUBSTR 是 SUBSTRING 的同义词,MySQL 官方文档明确说明二者行为无任何差异,函数签名、参数含义、NULL 处理全部一致。代码里用哪个纯看团队风格或历史习惯。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » mysql如何使用substring提取子串_mysql字符串截取方法-mysql教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1394+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4041504+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1394+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4041504+
  • 本周更新: 0+
  • 最后更新: 2026-03-16