博客园潜水多年,账号都搞忘记好几个,一直没有写什么东西,但是这次真忍不了了,被sqlsugar出现的奇葩题目和作者的奇葩处置惩罚方式给气到了。
因由是在使用Sqlsugar过程中,偶尔发现了一个题目,确认这个题目真实存在后,我就去提了issue:
含糊查询遭遇特别符号时的题目 · Issue #1303 · DotNetNext/SqlSugar
省流阐明: 题目大概就是,当含糊搜索的关键词是 %% 时,sqlsugar 会将sql生成 like '%%%%' 如许。由于 %%%% 允许名字包含恣意数量的字符,这个模式实际上会匹配 字段中的任何值。换句话说,这个 LIKE 条件没有提供任何过滤,因此它相当于没有指定任何条件。
本身这个题目很简朴,我甚至都不太相信开源多年,这么大用户量的ORM会有这种低级的题目。但是作者的回复真的把我惊到了:
就是不改,还狡辩称很多ORM都不会去处置惩罚这个。
昨天忙,没时间理这个,今天空闲了,然后就做了下测试,选择了三个最常用的ORM:Freesql,SqlSugar,EF Core。
ORM | 版本号 | Freesql | 3.2.833 | SqlsugarCore | 5.1.4.17 | EF CORE | 8.0.11 |
测试代码如下:
- var word = "%%";
- Console.WriteLine(" ");
- Console.WriteLine(" ");
- Console.WriteLine("FreeSql:");
- var list1 = freeSql.Select<Student>().Where(t => t.Name.Contains(word)).ToList();
- Console.WriteLine(" ");
- Console.WriteLine(" ");
- Console.WriteLine("SqlSugar:");
- var list2 = sqlSugarClient.Queryable<Student>().Where(t => t.Name.Contains(word)).ToList();
- Console.WriteLine(" ");
- Console.WriteLine(" ");
- Console.WriteLine("EF CORE:");
- var list3= dbContext.Students.Where(t => t.Name.Contains(word)).ToList();
复制代码
执行结果如下:- FreeSql:
- Sql:SELECT a.`Id`, a.`Name`, a.`Age`, a.`GradeId`
- FROM `student` a
- WHERE (locate('%%', a.`Name`) > 0)
- SqlSugar:
- SELECT `Id`,`Name`,`Age`,`GradeId` FROM `student` WHERE (`Name` like concat('%',@MethodConst0,'%'))
- {"@MethodConst0":"%%"}
- EF CORE:
- warn: Microsoft.EntityFrameworkCore.Model.Validation[10400]
- Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data; this mode should only be enabled during development.
- info: Microsoft.EntityFrameworkCore.Database.Command[20101]
- Executed DbCommand (3ms) [Parameters=[@__word_0_contains='%\%\%%' (Size = 4000)], CommandType='Text', CommandTimeout='30']
- SELECT `s`.`Id`, `s`.`Age`, `s`.`GradeId`, `s`.`Name`
- FROM `student` AS `s`
- WHERE `s`.`Name` LIKE @__word_0_contains
复制代码
从上述结果可以明显看到,Freesql使用了 locate 函数来实现含糊搜索;EF CORE 对 % 进行了转义(__word_0_contains='%\%\%%') 。 唯独Sqlsugar,就是个奇葩,完全不处置惩罚!作者还强词夺理的狡辩!
SON OF BISCUIT !
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |