You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何实现区分大小写的字符串匹配与列值拆分?

实现MySQL区分大小写的字符串匹配需求

当然可以实现这个区分大小写的查找需求!MySQL里的字符串匹配是否区分大小写,核心取决于字符集的排序规则,以及你选择的查询方式。下面给你两种直接可行的方案:

方案1:使用COLLATE指定区分大小写的排序规则

MySQL中,以_ci结尾的排序规则(比如默认的utf8mb4_general_ci)是不区分大小写的,而以_bin结尾的二进制排序规则会严格区分字符的大小写(因为它直接比较字符的二进制值)。

你可以在查询时给LOCATE函数的匹配目标指定二进制排序规则,修改你的查询片段如下:

SELECT 
  SUBSTRING_INDEX(description, 'Ingredients', 1),
  IF(LOCATE('Ingredients', description COLLATE utf8mb4_bin) > 0, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(description, 'Ingredients', -1), '...', 1), 
     '') AS extracted_ingredients_part
FROM your_table_name;

这样,只有当description中存在精确的Ingredients(首字母大写)时,LOCATE才会返回大于0的位置;如果是小写的ingredients,结果会是0,完全符合你的要求。

方案2:使用BINARY操作符强制二进制比较

另一种简单的方式是用BINARY关键字把匹配字符串转成二进制格式,这样比较时会严格区分大小写:

SELECT 
  SUBSTRING_INDEX(description, 'Ingredients', 1),
  IF(LOCATE(BINARY 'Ingredients', description) > 0, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(description, 'Ingredients', -1), '...', 1), 
     '') AS extracted_ingredients_part
FROM your_table_name;

同样,这个写法会让LOCATE只匹配大小写完全一致的Ingredients。

进阶:设置字段默认区分大小写

如果你的业务长期需要对description字段做区分大小写的查询,可以在建表时直接指定字段的排序规则为二进制类型,这样后续查询就不用每次额外指定规则了:

CREATE TABLE your_table_name (
  id INT AUTO_INCREMENT PRIMARY KEY,
  description VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
);

举个验证例子:对于字符串'Oil is a product Ingredients are',执行SELECT LOCATE('Ingredients', description COLLATE utf8mb4_bin)会返回匹配的位置,而SELECT LOCATE('ingredients', description COLLATE utf8mb4_bin)会返回0,完美满足你的区分大小写需求。

内容的提问来源于stack exchange,提问作者Rand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:23:53