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

MySQL使用LENGTH(CONCAT)查询姓名长度超10字符数据返回全表问题

问题成因

  • 误用LENGTH()函数统计长度:LENGTH()返回的是字节长度,若字段使用utf8等多字节编码,1个中文/全角字符占24字节。如果你实际需要筛选的是*字符数超过10*,那么`LENGTH(CONCAT(name,forname))>10`对应的实际字符数阈值仅为35,只要表中所有数据的拼接后字符数都达到这个阈值,就会返回全表。
  • WHERE条件被意外注释:如果SQL语句末尾意外加了--或#等MySQL注释符,会导致长度判断条件被注释,最终等价于执行全表查询,返回所有数据。
  • 字段名拼写错误:如果forname是拼写错误的字段名,而表中正好存在同名字段且值均为长字符串,也可能导致所有数据都满足判断条件。

解决方法

  • 替换长度统计函数:如果需要按字符数统计筛选,把LENGTH()替换为CHAR_LENGTH(),该函数返回的是字符数,不受编码类型影响,修改后的语句如下:
SELECT * FROM name_of_table WHERE CHAR_LENGTH(CONCAT(name, forname)) > 10;
  • 检查SQL语句完整性:确认WHERE后所有条件没有被注释符截断,不存在多余的--、#或/* */注释块包含了判断条件。
  • 核对字段名:确认name、forname是表中实际存储名字、姓氏的字段,没有拼写错误。
  • 若字段存在NULL值的可能,可以用CONCAT_WS('', name, forname)替换CONCAT,避免单个字段为NULL时拼接结果返回NULL导致筛选遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:15:04