OracleのTO_SINGLE_BYTE関数をMySQLで

社内サーバで、CGIのデータベースをOracleからMySQLに移行している作業の最中。

CGIはPerlで、元々の開発者がDBD/DBIを使って作っていてくれたおかげで、MySQLへの接続対応もほんの数行で完了。DBD/DBIに感謝。

ただ、SQL構文の違いや、MySQLの日本語の扱いについて少しはまってしまった。中でもOracleのTO_SINGLE_BYTE関数の代替がMySQLには無いってこと。関数の名前のとおり、文字列中の全角文字を半角文字に変換する(英数字、記号が対象)のだけど、これを使っている箇所があってちょっとだけ困ってしまった。

仕方ないので、全角→半角変換をPerl側で代わりに処理することにして、データも加工することにしたけれど、この変換って定石は無いのだろうか。Encodeモジュール、Jcode.pl、Jcode.pmともそういう関数は提供されていないみたいで、CPANからUnicode::Japaneseモジュールを引っ張ってきてOKだったけど…。意外とニーズが無いってことなのかな。

あとは、Oracleでトリガとストアドを使っている部分をどうやって移行するか…。

タイトルとURLをコピーしました