最近のデータベースソフトウェアでは正規表現が利用できるようになっており、拗音・促音で大文字小文字どちらでも検索できるような対応を行った。正規表現の[]を利用して検索条件を設定したところ、「ァィゥェォャュョ」(拗音)は問題なく対応できたのだが、「ッ」(促音)で躓いてしまった。
大文字小文字でも検索できるように、検索文字列に含まれる「ツ」や「ッ」を「[ツッ]」と定義して検索を行えるように対応してみたのだが、思いがけない問題にはまってしまった。なんと、「ヅ」が検索できなくなってしまったのである。正規表現で「ヅ」は「[ツッ]゙」と置き換えたわけだが、下記の結果となってしまった。
検証環境
OS:WindowsServer2008 Release2
データベース:SQLServer2008(10.50.1600) Release2
照合順序:Japanese_CS_AS_KS_WS
----------------------- ■テーブルレイアウト name_table { kana nchar(100) } ■データ内容 "イシヅ テスト" "ハツトリ テスト" "ハットリ テスト" -----------------------
上記テーブルとテストデータを用意して、下記のクエリーを実行します。
確認結果
正規表現[]を利用して検索
select count(*) from name_table where kana like 'ハ[ツッ]トリ%';
結果:2件 ⇒ OK
正規表現無しで検索
select count(*) from name_table where kana like 'イシヅ%'
結果:1件 ⇒ OK
正規表現で検索
select count(*) from name_table where kana like 'イシ[ツッ]゙%'
結果:0件 ⇒ NG
なぜっ!?
select count(*) from name_table where kana like 'イシ[ツッ]%'
結果:0件 ⇒ NG
「ヅ」⇒「ツ」「゙」に分けて照合される想定でしたがSQLServer上は「ヅ」で一つの文字として扱われているような結果となりました。
データベースの仕様かもしれませんが、現状では原因をつかみ切れていません。プログラムで濁点の混じる「ツ」の場合は正規表現しないように対応することで無事回避はできましたが、拗音・促音の検索強化を行った結果、通常の「ヅ」が検索できないという結果に陥るとは思いもしませんでした。「ヅ」はWeb上でコピー&ペーストする際は濁点が含まれた状態でしか選択できないのですよね。何故か。メモ帳などのテキストエディタでは別々に選択が可能です。
コメント