MYSQL 4.1 の余計なエスケープ処理
おはようございます。PERL 5.8.5 からMYSQL4.1 サーバーへのデータINSERT 時の文字変換処理について教えてください。
MYSQL 4.1 の文字コードは次の通りです。
SHOW VARIABLES LIKE 'character?_set?_%'; の結果
character_set_client :binary
character_set_connection:binary
character_set_database:utf8
character_set_results:binary
character_set_server:utf8
character_set_system:utf8
MYSQL 4.1 サーバーが上記のような状態で、PERL で次の処理をします。なお、PERL ソース自体はEUC で書かれています。
#!/usr/bin/perl
use Jcode;
use DBI;
$string = "あああ";
Jcode::convert( ?$string, 'utf8', 'euc' );
$dbh = DBI->connect( 'DBI:mysql:DB名:ホスト名:3306', 'ユーザー名', 'パスワード' ,{AutoCommit => 0} );
$sth = $dbh->prepare( "set names utf8" );
$sth->execute;
$sth->finish;
$sth = $dbh->prepare( "insert into test values( ? )" );
$sth->bind_param( 1, $string );
$sth->execute;
$sth->finish;
$dbh->commit;
$dbh->disconnect;
上記のソースを実行すると、MYSQL 4.1 サーバーには [あ?あ?あ] のような、余計なエスケープが掛かった状態で文字がINSERT されているのです。
私としては、set names utf8 で、MYSQL 4.1 サーバーとクライアントで同様の文字コードを使うようにしているので、MYSQL 4.1 における余計な文字コード変換はないものと思っています。余計な文字コード変換がないにもかかわらずエスケープ文字が入る理由が分かりません。
この現象についてお分かりの方がいらっしゃいましたら教えて頂きたく思います。なお、ネットでも調べたのですが、どの方も未解決でしたので質問さえて頂きました。
お願いします。
お礼
質問が分かりにくくてスイマセンでした。 ものすごい初歩的ながら、どうしてもUTF-8だけだめでして… やり方が違うのかと思ったのですが、やはり間違ってなかったみたいです。 あちがとうございました。もう一度いろいろやってみます。