ふつうにrs.getString()で取り出すと化けるけど、new String(rs.getBytes()) なら化けずに取り出せた。
マシンAとBがあり、すべて文字コードはUTF-8になっている。Aはウェブサーバ、Bはデータベースサーバで、直接BのMySQLに入ったりAからTCP経由でBのMySQLにログインしたりしてコマンドラインからsnippet関数を使う分にはなんら問題はなかったのだが、Aで走らせているJavaプログラムからJDBC経由でBのMySQLにアクセスし、snippet関数を使うといわゆる全角文字がいわゆる文字化けを起こしていわゆる■ぽい記号(いわゆる�)に変わってしまっていた。leftなどのほかの文字列関数は問題なく出力されるのにsnippetだけ出てこないので、これを何とか直そうと、ResultSetクラスのメソッドを眺めていたら、まずgetAsciiStreamというのを見つけたので、これを使ってInputStreamをつくり、BufferedReaderとInputStreamReader経由でStringに直してみたら文字化けしなかった。しかしこれでは長いのでほかにないかと眺め続けると、getBytesを見つけ、これをStringのコンストラクタに入れたらどうなるかやってみたら無事ちゃんと出力された次第。やったぁ。ここまで1時間30分。
あと、snippet関数で指定できるキーワードの数は32個までみたいなので、1人が登録できるタグの上限はとりあえず32個までにしましょう>id:foaran。32個以上だと特別なテクが必要になって処理が遅くなる。