我正在创建一个使用电子邮件地址作为唯一标识符的系统。有时我需要通过电子邮件地址查找用户。如果用户输入的电子邮件地址全部小写,但数据库将其存储为大小写混合,是全扫描,还是数据库仍使用索引?
这确实是个问题,因为我在将用户添加到系统时尝试验证电子邮件地址是否有效。
我在数据库后端使用 grails 和 MYSQL。 我目前这样做是为了找到用户
def c = User.createCriteria()
def currentUser = c.get() { ilike('emailAddress',message.sender.address) }
我知道我可以在 UI 上强制大小写,但我也想在模型级别强制它
谢谢,很抱歉问了这么长的问题
最佳答案
MySQL 指定 collation对于每个字符列,可能区分大小写或不区分大小写。
索引是使用列上指定的任何排序规则构建的,因此:
- 更改您的表以在电子邮件列上指定不区分大小写的排序规则(例如
ascii-general-ci
)。 - 重建索引。
- 享受吧。
请记住,针对电子邮件的所有查询现在将不区分大小写。
关于mysql - MYSQL 中的大小写敏感性和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1947386/