Molto tardi a questo post, ma ho qualcosa di leggermente diverso da dire ...
>> "Are email addresses case sensitive?"
Bene, "Dipende ..." (TM)
Alcune organizzazioni pensano che sia una buona idea e i loro server di posta elettronica applicano la distinzione tra maiuscole e minuscole.
Quindi, per quei luoghi folli, "Sì, le email fanno distinzione tra maiuscole e minuscole".
Nota: solo perché una specifica dice che puoi fare qualcosa non significa che sia una buona idea farlo.
Il principio di KISS suggerisce che i nostri sistemi utilizzano e-mail senza distinzione tra maiuscole e minuscole.
Considerando che il principio di robustezza suggerisce che accettiamo e-mail sensibili al maiuscolo / minuscolo.
Soluzione:
- Memorizza le e-mail con distinzione tra maiuscole e minuscole
- Invia e-mail con distinzione tra maiuscole e minuscole
- Esegui ricerche interne con insensibilità al maiuscolo / minuscolo
Ciò significherebbe che se questa email esiste già: user@x.com
... e arriva un altro utente e desidera utilizzare questa email: USER@x.com
... che la nostra logica di ricerca senza distinzione tra maiuscole e minuscole restituirebbe un messaggio di errore "Quella email esiste già".
Ora hai una decisione da prendere: quella soluzione è adeguata nel tuo caso?
In caso contrario, potresti addebitare una commissione di convenienza a quei clienti che richiedono supporto per le loro e-mail con distinzione tra maiuscole e minuscole e implementano la logica personalizzata che consente a USER@x.com nel tuo sistema, anche se user@x.com esiste già.
Nel qual caso la tua logica di ricerca / convalida della posta elettronica potrebbe assomigliare a questo pseudocodice:
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 + '"
}
In questo modo, si impone principalmente l'insensibilità ai casi, ma si consente ai clienti di pagare per questo supporto se utilizzano sistemi di posta elettronica che supportano tali sciocchezze.
ps ILIKE è una parola chiave PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html