前言:
不同数据库处理文本的方式差异很大;例如,一些数据库默认区分大小写(例如 Sqlite、PostgreSQL),但其他数据库不区分大小写(SQL Server、MySQL)。
此外,由于索引的使用,区分大小写和类似方面可能会对查询性能产生深远的影响:虽然在区分大小写的数据库中使用 string.ToLower
强制实施不区分大小写的比较很有诱惑力,但这样做可能会阻止应用程序使用索引。
---------
对于sqlite 默认匹配大小写 在efcore中提供了EF.Functions.Collate方法,指定排序规则。其中“NOCASE”是sqlite中忽略大小写规则的字符串。
resultAccount = data_context.Accounts.FirstOrDefault( acc => ( (EF.Functions.Collate(acc.gameName, "NOCASE") == GameName)&& (EF.Functions.Collate(acc.tagLine, "NOCASE") == TagLine) ) );对于sql-server 可以使用一样的方法,但排序规则不同。下面的示例让sql-server对大小写敏感。
var customers = context.Customers
.Where(c => EF.Functions.Collate(c.Name, "SQL_Latin1_General_CP1_CS_AS") == "John")
.ToList();
sql-server 默认使用 SQL_Latin1_General_CP1_CI_AS 不匹配大小写。
---------
参考:https://learn.microsoft.com/ef/core/miscellaneous/collations-and-case-sensitivity