「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は、はじめてです。よろしくお願いします。
なかなか回答がないようですので…
近頃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モジュールを弄るか、ユーザー定義関数、クラスなどで呼び出すのが良いかと思います。
1145549302の質問の方同じ方だと気づきませんで重複回答のようになってしまい申し訳ありません。
システム(my.ini)の文字セットがsjisに統一されていれば文字コードをセットする必要性もないかと思うのですが。
確実にするため明示的に作成するのであれば下記のようなSQL構文でよいかと思います。
ここで注意してもらいたいのはtable作成時にも文字コードをセットしている事ですね。
mysql> CREATE DATABASE test DEFAULT CHARACTER SET sjis;
mysql> SHOW CREATE DATABASE test;
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でもいいような気もします。
>1145549302の質問の方同じ方だと気づきませんで重複回答のようになってしまい申し訳ありません。
とんでもないです。お気になさらないでください。SQLの書き方ありがとうございます。時間を作って試したいと思います。
ver3.xがmy.iniの設定しなくても日本語の文字化けせずに使えたので一安心です。
引き続きver5について何かありましたらよろしくお願いします。
データベースとテーブル作成時に文字コードをセットするっていうのは、コマンドラインで下記のような書き方でよかったでしょうか?よろしくお願いします。
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のフォルダにそのままコピーするだけでいいんですよね。