tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【perl】perl x mysql(DBI::mysql)でのかなり恥ずかしい文字化け対応 - ????とかになっちゃう。

はじめに

perl関連で文字化け的なものが発生すると、あーあれね、内部文字列だとかのやつね。
とかなりがちですよね。
しかしそう思い込んで対処しようとしていたらもっと初歩的なことに気付かずで時間を使ってしまったというだけのメモ。

ぐ。。。

対応方法

文字化けった内容のほうは見せるまでもないので対応だけ書いておわりにします。

文字化けるとき

# 各変数には適切な値が入ってる
my $dbh = DBI->connect(
  "dbi:mysql:dbname=$DB_NAME;host=$DB_HOST;port=$DB_PORT;mysql_socket=/tmp/mysql.sock",
  "$DB_USER","$DB_PASS",
  { RaiseError => 1, PrintError => 1, AutoCommit => 1, Warn => 1 }
) or die "$!\n Error: failed to connect to DB.\n";

文字化けなくすとき

# 各変数には適切な値が入ってる
my $dbh = DBI->connect(
  "dbi:mysql:dbname=$DB_NAME;host=$DB_HOST;port=$DB_PORT;mysql_socket=/tmp/mysql.sock",
  "$DB_USER","$DB_PASS",
  { RaiseError => 1, PrintError => 1, AutoCommit => 1, Warn => 1 }
) or die "$!\n Error: failed to connect to DB.\n";
$dbh->do("set names utf8");

そうです。
$dbh->do("set names utf8");が抜けてるというかなり初歩的なやーつです。

文字化けってるときってこんなんãã¹ãã¦ãã¨とかになったりしますけど、
どの文字列もEncode::decodeとかutf8プラグマとかしようがしまいが????ってなるのでおかしいなーとは思ったんですよね。。。orz

完全あーあれね、perl文字コードの扱いのヤツねと、Encodeモジュールあたりやらいろいろ見直してみてもみつからず。。。
思い込みってこわい(><)

おわり

初歩的なことでも思ったよりは時間を使ってしまったので戒メモでした。。。