Muito tarde para este post, mas tenho algo um pouco diferente a dizer ...
>> "Are email addresses case sensitive?"
Bem, "Depende ..." (TM)
Algumas organizações realmente acham que é uma boa ideia e seus servidores de email reforçam a distinção entre maiúsculas e minúsculas.
Portanto, para esses lugares malucos, "Sim, os e-mails diferenciam maiúsculas de minúsculas".
Nota: Só porque uma especificação diz que você pode fazer algo não significa que é uma boa ideia fazê-lo.
O princípio do KISS sugere que nossos sistemas usem emails que não diferenciam maiúsculas de minúsculas.
Considerando que o princípio Robustez sugere que aceitamos emails com distinção entre maiúsculas e minúsculas.
Solução:
- Armazene emails com distinção entre maiúsculas e minúsculas
- Envie e-mails com distinção entre maiúsculas e minúsculas
- Realize pesquisas internas com distinção entre maiúsculas e minúsculas
Isso significa que, se este e-mail já existir: user@x.com
... e outro usuário aparece e deseja usar este email: USER@x.com
... que nossa lógica de pesquisa que não diferencia maiúsculas de minúsculas retornaria uma mensagem de erro "Esse email já existe".
Agora, você tem uma decisão a tomar: essa solução é adequada no seu caso?
Caso contrário, você poderá cobrar uma taxa de conveniência aos clientes que exigirem suporte para seus e-mails com distinção entre maiúsculas e minúsculas e implementar lógica personalizada que permita o USER@x.com em seu sistema, mesmo se user@x.com já existir.
Nesse caso, sua lógica de pesquisa / validação de email pode se parecer com algo como esse pseudocódigo:
if (user.paidEmailFee) {
// case sensitive email
query = "select * from users where email LIKE ' + user.email + '"
} else {
// case insensitive email
query = "select * from users where email ILIKE ' + user.email + '"
}
Dessa forma, você está impondo a distinção entre maiúsculas e minúsculas, mas permitindo que os clientes paguem por esse suporte se estiverem usando sistemas de e-mail compatíveis com esse absurdo.
ps ILIKE é uma palavra-chave do PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html