重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Mysqlの文字コードがlatin1のサーバーAと、Mysqlの文字コードがutf8のサーバーBがあります。

サーバーA内でデータを取得し表示する際は、そのまま表示するだけで文字化けせず表示できますが、サーバーBからサーバーAのMySQLに接続し、表示した場合は文字化けします。

サーバーBはMysqlの文字コードの文字コードがutf8なのですが、サーバーAからデータを取得して表示するだけなのに文字化けってするのでしょうか?


どなたか原因が分かる方、よろしくお願いいたします。

質問者からの補足コメント

  • まず、接続方法ですが、perlを勉強中でDBIを使って接続してデータを取得しております。

    私の認識では、サーバーAのDBでは

    クライアント側の文字コード (sjis)⇒ ucs2 ⇒ サーバAのDB文字コード(latin1)
    サーバAのDB文字コード(latin1) ⇒ ucs2 ⇒ クライアント側の文字コード(sjis)

    と考えているのですが、こちらは問題ないでしょうか。


    問題ない場合、サーバーBからアクセスした場合

    サーバAのDB文字コード(latin1) ⇒ ucs2 ⇒ クライアント側の文字コード(sjis)

    となり、サーバーA内での処理と同じと考えたのでなぜ文字化けするのか分からないです。


    サーバーBからサーバーAのデータベースへ接続してデータを取得するだけで、サーバーBの文字コードは関係するのでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/27 12:08

A 回答 (2件)

ちょっとPerlのDBIには疎いのでもうしわけないですが


my.cnfなどサーバー側の設定ファイルで明示的にDBの文字コードを設定したり
connectする際にオプションでon_connect_do => ['SET NAMES utf8'],
したりすることで解消できるかもしれません。
    • good
    • 0
この回答へのお礼

レンタルサーバーなので文字コードの変更等出来ない事が多く困っておりましたが、教えていただいた内容を参考にコード変更等を行ったところ、なんとか表示することができました。

教えていただきありがとうございました。

お礼日時:2015/04/27 22:09

そりゃ文字コードが違うのですから多バイト文字は文字化けするでしょう。



>サーバーBからサーバーAのMySQLに接続し

どういう接続方法を使っているかを示した方がより実態にあった回答になるとおもいます
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!