Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL快速检测字段值是否包含大写

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

作者: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);

性能警示

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]';

总结

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

您可能感兴趣的文章:
阅读全文