ユーザー管理システムでのメールアドレスの取り扱いについて

よくあるユーザー管理システムでは、ログインIDとしてメールアドレスを利用することが多いと思われる。

この時ユーザーテーブルのメールアドレスの列は、ユニークかつ全て小文字で格納しておくのが好ましい。
(ユーザーの登録時や、検索時にメールアドレスの大文字・小文字の違いによって発生する不具合を防ぐため)

またユーザーの入力からデータを検索する際も、大文字小文字を区別せず検索するのが好ましい。
(MySQLの場合、特に指定がなければ標準で大文字小文字を区別しないようである)

既存のテーブルから、メールアドレスの列に大文字が含まれているユーザーの抽出は以下のSQLで行うことができる。

-- MySQL (大文字小文字を区別するためにcollateを利用する)
select * from user where lower(email) collate utf8_bin <> email;
-- PostgreSQL
select * from system_user where lower(email) <> email;

メールアドレスの列の更新の際も、lower関数を利用すれば良い。