PerlのJSONで文字化けを回避する

CGIでフォームから送信された文字列をJSONにエンコードしていたときの話です。
キーは英数字、値をUTF-8の文字列にした場合、エンコードした結果をSTDOUTに出力した場合は問題ないのに、DBに格納すると化けるという不思議な現象が発生しました。
「Perl JSON 文字化け」なので検索すると色々出てきますが、どれも参考にならず。「to_json()」も「encode_json()」もダメで、適当にいじっていたら「JSON->new->latin1->encode()」が正解でした。
とはいえ、なぜそうなのかが不明なので、環境によっては動かないかもしれません。
とりあえず、文字コード周りはエンコードを回避するためのパラメータを用意しておいて欲しいものです。
あと、JSONはpureperlなので、スクリプトをアップする際には使用したモジュールをコピーしておくと、動作が保障されると思われます。
でめたしでめたし。