首页/数据/SQL 速查/REPEAT / REVERSE 重复与反转
函数速查60 条

REPEAT / REVERSE 重复与反转

重复字符串与反转字符串:造分隔线、生成占位、验证回文与编码问题时会用到。

SQL 速查数据更新于 2026-10-13

两个函数做什么

REPEAT 把字符串重复 n 次,REVERSE 把字符串顺序倒过来,MySQL 与 PostgreSQL 都有这两个同名函数。典型用途是造分隔线、生成占位文本、验证回文以及排查尾部空白与不可见字符。MySQL 另有 SPACE(n) 直接生成 n 个空格,PostgreSQL 没有,用 repeat(' ', n) 代替。

基本信息

适用平台MySQL / PostgreSQL 均有 repeat 与 reverse
语法REPEAT(str, n)、REVERSE(str)
边界n <= 0 返回空串;任一参数为 NULL 结果为 NULL
MySQL 专有SPACE(n) 生成 n 个空格

典型使用场景

  • 生成报表分隔线与对齐填充,让文本输出更易读
  • 造长占位串测试字段长度上限与截断行为
  • 验证回文或字符串处理逻辑,反转是最快的目视检查
  • 排查尾部空白与不可见字符:反转后它们出现在开头更容易看到
  • 生成测试数据填充定长字段

MySQL 写法

MySQL 写法
SELECT REPEAT('-', 10);   -- '----------' 十个连字符
SELECT REPEAT('ab', 3);    -- 'ababab'
SELECT REVERSE('abc');     -- 'cba'
SELECT SPACE(5);           -- '     ' 五个空格,MySQL 专有
SELECT REPEAT('x', 0);     -- '' n <= 0 返回空串
SELECT REVERSE('中文');     -- 按字符反转,不会拆坏多字节字符

PostgreSQL 写法

PostgreSQL 写法
SELECT repeat('-', 10);   -- '----------'
SELECT reverse('abc');    -- 'cba'
SELECT repeat(' ', 5);    -- 五个空格,PG 没有 SPACE()
SELECT length(reverse('中文'));  -- 2,按字符计数

边界情形与返回值

情形返回值
n = 0空串 ''
n < 0空串 ''(两库一致)
任一参数为 NULLNULL
多字节字符按字符计数与反转
n 很大结果串随之膨胀,受内存与结果集大小限制
生成超长串会占用内存并把结果集撑大,MySQL 还会受 max_allowed_packet 约束;用大 n 做测试时先算一下结果体积,或改为分片拼接。
REVERSE 在多字节字符集下按字符反转,不会把汉字切开;但如果先按字节拼接再反转、或两侧字符集不一致,比较结果可能与直觉不符。
与 LPAD/RPAD 的分工:LPAD/RPAD 按指定总长度补齐并可能截断,适合定长对齐;REPEAT 只负责重复,长度由 n 决定。做定长报表时用 LPAD/RPAD 更直接。
快速判断回文的写法:先去掉空白、统一大小写,再比较 s 与 REVERSE(s) 是否相等。注意 None/NULL 与空串要分开处理,空串反转后仍是空串。

易错点

  • 用超大 n 直接生成字符串:结果占内存也占网络,可能触发 max_allowed_packet 或拖慢查询,测试前先估算体积
  • 把 REPEAT 生成的长串直接写进日志或报表:单条日志被撑爆,应按需截断或分片输出
  • 在 PostgreSQL 里调用 SPACE():PG 没有这个函数会直接报错,改用 repeat(' ', n)
  • 以为 REVERSE 按字节反转:两库实际按字符处理,但拼接后再比较要注意字符集一致
  • 参数为 NULL 时误当成空串处理:任一参数 NULL 结果就是 NULL,展示前用 COALESCE 兜底
  • 拿重复串做定长对齐:终端显示宽度按字符计,中英文混排时视觉宽度仍对不齐,定长场景用 LPAD/RPAD

数据来源与参考

  • MySQL 8.0 Reference Manual · String Functions
  • PostgreSQL Documentation · String Functions and Operators
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌