OSはWIN2000、AN HTTP+mysql5.0+perl5.8をインストールしたのですがつまずいております。

「mysqlコマンドでは大丈夫ですがperlで出力した日本語の文字が ? に化けます。」いくつも解説しているページを見つけましたが情けないのですが、解決できませんでした。
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_52
http://reverb.jp/vivian/index.php?itemid=497
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2062298
①perlでは、『データベース、テーブルの作成時』『connectしたあと』query("set character set sjis") を書くらしいのですが、http://homepage1.nifty.com/yito/anhttpd/faq/mysql.htmlこのページのスクリプトを例に書き直すとするとどんな文を書けばよいでしょうか。データベースを作る(SET付与)ときのコマンドラインの書き方も補足をお願いしたいです。
②my.iniの書き方のアドバイスをお願いします。いろいろなページを見て書き直しましたが、show variables like 'char%';を実行するとcharacter_set_filesystemがbinaryでcharacter_set_systemがutf8他はsjisになってます。これでよいのでしょうか。上記の他になにか必要な設定がありましたら合わせてお願いします。
perlは初心者でmysqlは、はじめてです。よろしくお願いします。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2006/04/20 21:16:51
  • 終了:2006/04/27 21:20:03

回答(2件)

id:tenshiks No.1

tenshiks回答回数52ベストアンサー獲得回数12006/04/21 06:23:16

ポイント35pt

なかなか回答がないようですので…

近頃php+postgresqlなので的確な答えでなければ申し訳ないですが。

perlでも一緒ですので。

インストール手順としてしっかりしているサイトです。

http://php.goinkyo.be/?clt=general&doc=isrtmsl

①:とりあえず「?」文字化けであればmy.iniを下記のような感じでどうでしょう?

全てをsjisにそろえて下さい。

 [client]

 default-character-set=sjis

 [mysqld]

 language = japanese

 default-character-set=sjis

 init-connect=SET NAMES sjis

②:①で解決しない場合、

connectした後すぐにqueryを流してみてください。

ちなみにこれはconnectする度にです。

参考

$db = DBI->connect("DBI:mysql:$dbname;host=$host", $user, $passwd);

$db->prepare("set character set sjis");

③:切り分けをするためにスクリプト側の文字コードをutf8等にしてみる。


postgresqlではdb側でsjisが使えない為2の方法しか使えません。

ちなみに

pg_query("SET CLIENT_ENCODING TO 'SJIS';");


ですが、mysqlならばdb、スクリプト双方の文字コードが一致していれば必要ないためwin環境ですので2は必要ない気もします。

2の場合毎回流さなきゃいけないのでconnectとセットにして流したいのでDBIモジュールを弄るか、ユーザー定義関数、クラスなどで呼び出すのが良いかと思います。

id:rain2003

データベースとテーブル作成時に文字コードをセットするっていうのは、コマンドラインで下記のような書き方でよかったでしょうか?よろしくお願いします。

mysql> set character set sjis;

mysql> create database test;

mysql> set character set sjis;

mysql> create table addrbook (name varchar(50),telno varchar(50), email varchar(

50));

[追記]フォルダMySQLのmy.iniは、WINDOWSのフォルダにそのままコピーするだけでいいんですよね。

2006/04/21 12:33:00
id:tenshiks No.2

tenshiks回答回数52ベストアンサー獲得回数12006/04/22 00:13:59

ポイント35pt

1145549302の質問の方同じ方だと気づきませんで重複回答のようになってしまい申し訳ありません。


システム(my.ini)の文字セットがsjisに統一されていれば文字コードをセットする必要性もないかと思うのですが。

確実にするため明示的に作成するのであれば下記のようなSQL構文でよいかと思います。

ここで注意してもらいたいのはtable作成時にも文字コードをセットしている事ですね。


  • 文字コードをセットしてdb作成

mysql> CREATE DATABASE test DEFAULT CHARACTER SET sjis;

  • 念のため文字コード確認

mysql> SHOW CREATE DATABASE test;

  • 文字コードをセットしてtable作成

mysql> CREATE TABLE addrbook (name varchar(50),telno varchar(50), email varchar(50)) DEFAULT CHARACTER SET = sjis;

  • 念のため文字コード確認

mysql> SHOW CREATE TABLE addrbook;



蛇足かも知れませんが、MySQLAdminというフリーのGUIソフトもあります、せっかくのWindowsですしGUIでもいいような気もします。

http://www.mmdb.net/m_kaneko/

id:rain2003

>1145549302の質問の方同じ方だと気づきませんで重複回答のようになってしまい申し訳ありません。

とんでもないです。お気になさらないでください。SQLの書き方ありがとうございます。時間を作って試したいと思います。

ver3.xがmy.iniの設定しなくても日本語の文字化けせずに使えたので一安心です。

引き続きver5について何かありましたらよろしくお願いします。

2006/04/22 01:06:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません