mysql - MYSQL 中的大小写敏感性和索引

标签 mysql hibernate grails

我正在创建一个使用电子邮件地址作为唯一标识符的系统。有时我需要通过电子邮件地址查找用户。如果用户输入的电子邮件地址全部小写,但数据库将其存储为大小写混合,是全扫描,还是数据库仍使用索引?

这确实是个问题,因为我在将用户添加到系统时尝试验证电子邮件地址是否有效。

我在数据库后端使用 grails 和 MYSQL。 我目前这样做是为了找到用户

def c = User.createCriteria()
def currentUser = c.get() { ilike('emailAddress',message.sender.address) }

我知道我可以在 UI 上强制大小写,但我也想在模型级别强制它

谢谢,很抱歉问了这么长的问题

最佳答案

MySQL 指定 collation对于每个字符列,可能区分大小写或不区分大小写。

索引是使用列上指定的任何排序规则构建的,因此:

  1. 更改您的表以在电子邮件列上指定不区分大小写的排序规则(例如 ascii-general-ci)。
  2. 重建索引。
  3. 享受吧。

请记住,针对电子邮件的所有查询现在将不区分大小写。

关于mysql - MYSQL 中的大小写敏感性和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1947386/

相关文章:

php - 来自 cronjobs 的 mySQL 锁定记录

mysql - 如何设置sql_mode hibernate

grails - 在不输出完全限定的字段名称的情况下渲染renderErrors

grails - Grails filterPane插件适合页面布局

Grails 无法解码 unicode 字符

mysql - 从 MS SQL 2000 迁移到 MySQL 5.1 时出错

php - 从mySQL结果集中查找rownum进行排名

php - 使用主键和复选框使用 PDO、PHP 和 MYSQL 删除语句

java - 使用 JPA 的 UUID 映射类型

java - HQL查询复杂DTO