【症状】
更新システム(オリジナルスクリプト)をアップするが、日本語をいれると文字化けしまくる。
phpmyadminを使って、直接入れたデータに関しては、「十字架の記号」や「???」が出る。

### サーバーの条件 ###
Perl 5.8.5
Mysql 4.1.10a-log
####################

====スクリプトの設定====
INTER_CHARSETツꀀ = ‘euc’;ツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀ
DB_CHARSETツꀀツꀀツꀀツꀀ = ‘utf8’;ツꀀツꀀ
JS_CHARSETツꀀツꀀツꀀツꀀ = ‘utf8’;
====================

1) Jcodeがないので、Jcode.plを入れるが、Jcode.pmがないというエラーがでる。
下記記事を参考にJcode.pmを入れる(※スピーバーのサーバーの文字化けはこれで治ったから)

Jcode.pmをWindows上のPerlにインストールする (@にししふぁくとりー様

Jcode配布サイトより、zipファイルをダウンロード。重要なのはJcode.pmとJcodeフォルダ。

ツꀀ

しかし、エラーが出る。
クライアントとサーバーの文字コードの仲介役(Jcode.pm)のせいではないんだろう。
これは、mysqlの文字コードがおかしいと推察。

日本mysqlユーザー会FAQを参考に下記のことを実行。

sqlのクエリ文

SHOW VARIABLES LIKE ‘char%’;

で、キャラクターコードを確認する。

Variable_name Value
character_set_client utf8
character_set_connection ujis
character_set_database ujis
character_set_results utf8
character_set_server ujis
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

ツꀀ

こんな感じ。こんなにutf8やujisが混在していて大丈夫だろうか?
つか、ujis??? この結果を持って、会社のサーバー詳しい人に見せて相談。

「ujisとutf8で検索してみれば?」というありがたいアドバイスを頂いた!!

そこで調べてみるとそれらしき記事が!

MySQL 4.1 日本語環境設定方法 (キャラクタセット設定方法) (@iandeth.様)
MySQL 4.1 日本語環境での使用時の注意点/関連情報まとめ (@iandeth.様)
Movable Type + MySQL 4.1 を組み合わせると日本語が文字化けする不具合/障害の解決方法 (@iandeth.様)

本当にありがとうございました!!

ということで、「SET NAMES x」で、文字コードを指定することにしました。
そのタイミングは、DBI::mysqlで、データベースにconnectした時です。

オリジナルプログラムでは、
xxxx_db.pm の L47以下

sub DB_Connect() {

ツꀀ my $aaa= DBI->connect(*****,
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀ *****,
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀ *****,
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀ *****);
ツꀀ $aaa->do(“SET NAMES utf8”);
ツꀀ return $aaa;
}

※aaaは実際には違う変数だし、***は伏せてます。

ツꀀ

これで、うまく行きました!!!!

めっちゃ嬉しい! 半日もかかったよー!!!