以前、書いた「mysqlのcollateを使って大文字-小文字や全角-半角を無視した検索」の続き?です。
http://d.hatena.ne.jp/end0tknr/20100613/1276427626
以前、UCAというアルゴリズムの存在を教えて頂いた際、UCAはmysql or DBに固有のものだと思っていました。ところが、偶然、Unicode::Collate というperl moduleを見かけ、これをきっかけにUCAがunicode.orgで公開されていることも知りました。
http://search.cpan.org/dist/Unicode-Collate/
SYNOPSIS
use Unicode::Collate; #construct $Collator = Unicode::Collate->new(%tailoring); #sort @sorted = $Collator->sort(@not_sorted); #compare $result = $Collator->cmp($a, $b); # returns 1, 0, or -1.
http://www.unicode.org/Public/UCA/latest/allkeys.txt
Unicode::Collateがあれば、perlでも大文字-小文字や全角-半角を無視した検索を実装できると思います。「でも、mysqlに対し、次のようなsqlで問い合わせるのもありかも」とも思ったりもします。
mysql> select '1' = '1' COLLATE utf8_unicode_ci; +-------------------------------------+ | '1' = '1' COLLATE utf8_unicode_ci | +-------------------------------------+ | 1 | +-------------------------------------+ 1 row in set (0.03 sec) mysql> select '1' = 'A' COLLATE utf8_unicode_ci; +-----------------------------------+ | '1' = 'A' COLLATE utf8_unicode_ci | +-----------------------------------+ | 0 | +-----------------------------------+ 1 row in set (0.00 sec)