WIN2000+AN HTTP+mysql+perl5.8で使いたいと思っております。
文字化けしなかったのでv3使っていましたが、VIEWとかサブクエリ使えないので新しいバージョンのものを使いたいです。
前回質問しましたが何かが足りないんだと思うのですが、解決できませんでした。
http://q.hatena.ne.jp/1145535408
こちらのリンク先のパッチを当てたバイナリファイルを使った場合の設定の方法でもかまいません。
http://www.mysql.gr.jp/frame/modules/bwiki/?Contrib
phpMyAdmin 2.8.0.3も使ってます。
ずばりの手順、方法、ページなどお待ちしております。
ずばりでなくてもよいので、Q&Aで原因を潰して行っていただける方も歓迎です。
1週間以上格闘してますが、知識の幅が狭いため同じことばかり繰り返すばかりで解決しません。
初心者の私はポスグレにしたほうがいいでしょうか。(泣)
http://www.millionwaves.com/200601220359.html
文字化けと言うからには文字コードの問題ではないでしょうか?
Perl側で使う文字コードとMySQL側の文字コードが一致していないと想像します。
http://question.excite.co.jp/kotaeru.php3?q_id=2117214
この辺が近い感じだと思います。PHPとPerlという違いはありますが対策という点では同じだと思います。
5.xは使ったことがないのですが、4.1でやはり同じように、日本語が ???になるという問題にはまりました。
しかし、おそらくはすでに試されているとは思いますが、以下の SQLを接続直後に発行したら直りました。
SET NAMES utf8;
SJISなら
SET NAMES sjis;
EUCなら
SET NAMES ujis;
です。
あとは、CREATE DATABASEするときに、以下のように
http://dev.mysql.com/doc/refman/5.0/en/create-database.html
CHARACTER SETを指定してあげる。これでどうでしょうか。。
mysqlは、4.1以降から日本語の扱いが非常に下手になりましたよね。ちょっと扱いづらくて困っています。。
文字コードがEUC(ujis)であるという前提で…。
my.cnfに
[mysqld]
init-connect=SET NAMES ujis
と追加するか
SQLを発行する際に最初に
set names ujis
を発行してみてください。
前に,同じ症状ではまったので…。
URLはダミーです。
文字化け直りました。!!!!!!!!!
よくわかりませんが、
skip-character-set-client-handshake
この一行がなかったために文字化けしていたようです。これを記述しておくと、テーブル、データベースを作るときの文字コードの設定、スクリプトでconnectするときにの文字コードの設定をしなくても大丈夫のようです。
今までなんだったんだろう・・・。
上記の一行をmy.iniに加えれば大丈夫だと思いますが、作業した内容を書かせていただきます。私のような超初心者の方の参考になれば幸いです。
下記URLのスクリプト使ってます。
http://homepage1.nifty.com/yito/anhttpd/faq/mysql.html
山田花子が????になります。
●my.iniで、追加した項目
[client]
default-character-set=sjis
[mysqld]
skip-character-set-client-handshake
init-connect=SET NAMES sjis
----------------------------------------------------------------------
●CREATE DATABASE から INSERT INTOまで
CREATE DATABASE test DEFAULT CHARACTER SET sjis;
CREATE TABLE `addrbook` (
`name` varchar(25) default NULL,
`telno` varchar(25) default NULL,
`email` varchar(25) default NULL
) DEFAULT CHARSET=sjis;
set names sjis;
INSERT INTO `addrbook` (`name`, `telno`, `email`) VALUES ('Taro.Yamada', '090-1234-5678', 'taro@hoga.ne.jp'),
('Hanako.Yamada', '090-1111-9999', 'hanako@hoga.ne.jp'),
('山田花子', '090-1111-9999', 'hanako@hoga.ne.jp'),
('山田花子', '090-1111-9999', 'hanako@hoga.ne.jp');
----------------------------------------------------------------------
●次にスクリプトの記述です。connectのところから
$db = DBI->connect("DBI:mysql:$dbname;host=$host", $user, $passwd) || die "DBI connect failed : $DBI::errstr";
$db->prepare("set character set sjis");
$st = $db->prepare("SELECT name,telno,email from $tbname");
$res = $st->execute;
----------------------------------------------------------------------
せっかくですので、理由などもう少しお伺いしたいです。よろしくお願いします。
別人ですが…
MySQLはおせっかいにも設定された文字列で変換を行います。
skip-character-set-client-handshake
はその変換を行わないという設定です。
MySQLは4.1から文字コードutf8が標準になったので
utf8ですべてスクリプトから何から書くのがお薦めです。
sjisは何かと問題が多いので…
ただ、日本にはutf8が普及する前にeucという文字コードがあって
その設定をされているとutf8でも化けるなどの現象があります。
プログラム的にはutf8でスクリプトもdbもやりとりするのが
今後は好ましいと思います。
短時間に3人も回答いただき、ありがとうございます。疲労困憊でしたが元気が出てきました。
・my.iniの設定
・データベース作るときの文字のSET
・操作するときconnect後に文字セット
これぐらになるでしょうか。
私が、解説ページをそのまま忠実に操作できていないんだと思います。簡単なスクリプトでもう一回ひとつひとつ確認したいと思います。