MySQL如何快速检测字段值是否包含大写

 更新时间:2025年05月24日 09:20:11   作者:codingPower  
这篇文章主要介绍了MySQL如何快速检测字段值是否包含大写问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySQL快速检测字段值是否包含大写的精简指南

核心方法速查

方法1:正则表达式(推荐)

-- 检测任意位置包含大写
SELECT * FROM table 
WHERE column REGEXP BINARY '[A-Z]';

注意:可能存在不兼容字符集utf8mb4_bin问题 可用RLIKE替换

SELECT * FROM table 
WHERE column RLIKE '[A-Z]';

-- 检测全大写(排除数字符号)
SELECT * FROM table 
WHERE column REGEXP BINARY '^[A-Z]+$';

替换语句:

SELECT * FROM table 
WHERE column RLIKE  '^[A-Z]+$';

方法2:二进制对比

-- 检测首字母大写(这种的识别不出首字母是数字的数据)
SELECT * FROM table 
WHERE BINARY LEFT(column,1) = UPPER(LEFT(column,1));

-- ASCII码检测(A-Z=65-90)(下面的N代表第几位是大写)
SELECT * FROM table 
WHERE ORD(SUBSTRING(column,N,1)) BETWEEN 65 AND 90;

方法3:强制校验规则

-- 查询时指定区分大小写(精确查询 把Column字段的字符集设置成utf8mb4_bin ,会区分大小写 )
SELECT * FROM table 
WHERE column COLLATE utf8mb4_bin = 'TargetValue';

优化技巧(大数据量必备)

1.虚拟列索引(MySQL 8.0+)

ALTER TABLE users 
ADD COLUMN name_upper VARCHAR(255) 
GENERATED ALWAYS AS (UPPER(username)) VIRTUAL,
ADD INDEX idx_upper(name_upper);

2. 预处理首字母

ALTER TABLE products 
ADD COLUMN initial CHAR(1) 
GENERATED ALWAYS AS (UPPER(LEFT(code,1))) STORED,
ADD INDEX idx_initial(initial);

性能警示

  •  避免全表扫描:BINARY和REGEXP会使查询效率下降30%+
  • 优先方案:对常检测字段建立预处理列+索引
  • 查询技巧:结合LIMIT 1快速判断是否存在大写
SELECT 1 FROM table WHERE column REGEXP BINARY ‘[A-Z]' LIMIT 1;

实战案例

-- 用户表检测邮箱大小写重复
SELECT email 
FROM (
  SELECT LOWER(email) AS lower_email, 
         GROUP_CONCAT(email) AS duplicates
  FROM users 
  GROUP BY lower_email 
  HAVING COUNT(*) > 1
) t 
WHERE duplicates REGEXP BINARY '[A-Z]';

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论