[PHP-users 31673] Re: MySQLでのエラーと文字化け

Napura napura @ sky.707.to
2007年 3月 13日 (火) 00:46:05 JST


YuGo様・おく@Workgroup様・まつやま様

Napuraです。

ご回答ありがとうございます。
お礼が遅くなりまして申し訳ありません。

> syntax errorのところはよくわかりませんが、文字エンコーディングについて言
> います。
> 下のsql文を発行した結果を見てください。
> SHOW VARIABLES LIKE 'character%' ;
> character_set_clientとcharacter_set_serverが異なる場合、mysqlの自動文字
> コード変換が働きます。
> character_set_clientがPHPでINSERTしようとしているエンコーディングと異な
> る場合。たとえばEUC-JPを入れようとしている場合。
> SET NAMES ujis ;SHOW VARIABLES LIKE 'character%' ;
> これでcharacter_set_clientがujisに変わるはずです。
> 運用上はsql文を発行する前に呪文のようにSET NAMES キャラクタセット名 ;を
> 入れるでどうでしょう。
早速試してみます。

> おまけ
> SELECT version( ) ;を発行して、mysqlのバージョンを確認しておいたほうがい
> いですよ。
サーバーの環境などを問い合わせていましたもので
本処理をしてみることを忘れていました。
ありがとうございます。

>化けている文字からみて、
>・テーブルの文字コードがutf8 でない。
>・投げているsqlの文字が、utf8でない。
>ように見えますが・・・
たぶんテーブルの文字コードがおっしゃられている
ように、utf8でない可能性が高いです。
確かめて見ることを怠っていました。
投げている文字はWindowsのcsvファイルから読み取った
ものですので、S-JISでした・・・

>・テーブル作成の際に、文字コードを指定
>CREATE TABLE **** (
>*
>*
>) DEFAULT CHARSET=utf8;
テーブルは既存で作成されていましたので
この作業が出来ませんでした。

>・クエリーを投げる前に、SET NAMES utf8;
> あるいは、my.cnf で、
> init-connect=SET NAMES utf8
> を指定。
>・phpの内部エンコーディングを、utf8に指定。
>などの、基本的な事項は実施していますでしょうか?
あわてておりまして、基本的なチェックをご指示
いただくまで、怠っていたことを忘れていました。
勉強不足もありました。
ご指導ありがとうございます。

>「ソ」と「能」のところで化けていますね。
>の二文字は、シフトJISだと2バイト目が5Cになる文字です。
>PHPのソースはシフトJISで書かれていて、
>UTF-8のMySQLに接続なのでしょうか?
>そのあたりからまず確認してみては?
PHPのソースはWindowsのエディタですので
S-JISです。
相手のサーバーは問い合わせ中ですがたぶんUTF-8です。
試していた自サーバーのテーブルがS-JISでしたので
それで問題が無く突然文字化けしてあわててしまいました。
チェックと、勉強不足でした。

すべて試してチェックいたします。
アドバイス本当にありがとうございます。




PHP-users メーリングリストの案内