SQLite のブログ記事

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の場合は小文字なので、どちらかにあわせて検索をかける必要があるので注意。