Bien en retard à ce poste, mais j'ai quelque chose de légèrement différent à dire ...
>> "Are email addresses case sensitive?"
Eh bien, "ça dépend ..." (TM)
Certaines organisations pensent en fait que c'est une bonne idée et leurs serveurs de messagerie imposent une sensibilité à la casse.
Donc, pour ces endroits fous, "Oui, les e-mails sont sensibles à la casse."
Remarque: ce n'est pas parce qu'une spécification dit que vous pouvez faire quelque chose que c'est une bonne idée de le faire.
Le principe de KISS suggère que nos systèmes utilisent des e-mails insensibles à la casse.
Alors que le principe de robustesse suggère que nous acceptons les e-mails sensibles à la casse.
Solution:
- Stockez vos e-mails en respectant la casse
- Envoyer des e-mails en respectant la casse
- Effectuer des recherches internes avec insensibilité à la casse
Cela signifierait que si cet e-mail existe déjà: user@x.com
... et un autre utilisateur arrive et souhaite utiliser cet e-mail: USER@x.com
... que notre logique de recherche insensible à la casse renvoie un message d'erreur "Cet e-mail existe déjà".
Maintenant, vous avez une décision à prendre: cette solution est-elle adéquate dans votre cas?
Sinon, vous pouvez facturer des frais de commodité aux clients qui demandent une assistance pour leurs e-mails sensibles à la casse et implémenter une logique personnalisée qui autorise USER@x.com dans votre système, même si user@x.com existe déjà.
Dans ce cas, votre logique de recherche / validation de courrier électronique pourrait ressembler à quelque chose de ce pseudocode:
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 + '"
}
De cette façon, vous appliquez principalement l'insensibilité à la casse, mais vous permettez aux clients de payer pour cette assistance s'ils utilisent des systèmes de messagerie qui prennent en charge de telles absurdités.
ps ILIKE est un mot clé PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html