【症状】
更新システム(オリジナルスクリプト)をアップするが、日本語をいれると文字化けしまくる。
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は実際には違う変数だし、***は伏せてます。
ツꀀ
これで、うまく行きました!!!!
めっちゃ嬉しい! 半日もかかったよー!!!
コメントを残す