SQLite3で文字列データ(SJIS)を
SELECT * FROM table WHERE column LIKE '%キーワード%'
と検索すると上手くマッチしないことが多発。
多分UTF-8とかだとうまくいく。
・・・けど、もう動いちゃってるシステムをかえるのは大変。
ということでちょっと無理やりな方法で検索をかける。
SELECT * FROM table WHERE hex(column) LIKE '%16進数に変換したキーワード%'
SQLiteのhex()関数はバイナリを16進数に変換してくれるので、
これに対してLIKE検索をかける。
キーワードを16進数に変換するのはPerlの場合、
unpack("H*", '文字列' );
などとすればOK。(パフォーマンスは結構悪そう)
ただし、SQLite3のhex()は16進数にしたときのアルファベットは大文字、Perlの場合は小文字なので、どちらかにあわせて検索をかける必要があるので注意。
0 Comments
1 Pingback