人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mysql-5.0.20を使いたいのですが、文字化けで困っております。日本語の文字が?になってしまいます。
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週間以上格闘してますが、知識の幅が狭いため同じことばかり繰り返すばかりで解決しません。
初心者の私はポスグレにしたほうがいいでしょうか。(泣)

●質問者: rain2003
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:HTTP MySQL phpMyAdmin V3 view
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● tomo_k
●23ポイント

http://www.millionwaves.com/200601220359.html

文字化けと言うからには文字コードの問題ではないでしょうか?

Perl側で使う文字コードとMySQL側の文字コードが一致していないと想像します。

http://question.excite.co.jp/kotaeru.php3?q_id=2117214

この辺が近い感じだと思います。PHPとPerlという違いはありますが対策という点では同じだと思います。


2 ● selter
●23ポイント

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以降から日本語の扱いが非常に下手になりましたよね。ちょっと扱いづらくて困っています。。

◎質問者からの返答

短時間に3人も回答いただき、ありがとうございます。疲労困憊でしたが元気が出てきました。

・my.iniの設定

・データベース作るときの文字のSET

・操作するときconnect後に文字セット

これぐらになるでしょうか。

私が、解説ページをそのまま忠実に操作できていないんだと思います。簡単なスクリプトでもう一回ひとつひとつ確認したいと思います。


3 ● falcosapiens
●22ポイント

文字コードがEUC(ujis)であるという前提で…。

my.cnfに

[mysqld]

init-connect=SET NAMES ujis

と追加するか

SQLを発行する際に最初に

set names ujis

を発行してみてください。

前に,同じ症状ではまったので…。

Google

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;

----------------------------------------------------------------------

せっかくですので、理由などもう少しお伺いしたいです。よろしくお願いします。


4 ● abunakunai
●22ポイント

別人ですが…

MySQLはおせっかいにも設定された文字列で変換を行います。

skip-character-set-client-handshake

はその変換を行わないという設定です。

MySQLは4.1から文字コードutf8が標準になったので

utf8ですべてスクリプトから何から書くのがお薦めです。

sjisは何かと問題が多いので…

ただ、日本にはutf8が普及する前にeucという文字コードがあって

その設定をされているとutf8でも化けるなどの現象があります。

プログラム的にはutf8でスクリプトもdbもやりとりするのが

今後は好ましいと思います。

http://q.hatena.ne.jp/1146357712

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ