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

YuGo yu.gotou @ gtec-ni.com
2007年 3月 13日 (火) 16:46:32 JST


こんにちは。y-enomotoさん。

これは、latin1に存在しない文字コードが来た場合はエラーとして受け付けてい
ないのではないでしょうか。
たとえば、SJISの「あ」は文字コード0x82A0ですがlatin1にはそんな文字コード
ないのでINSERTさせない。

4.0までならこの状況でもINSERTできたのですが。

もっぱらWINDOWSがクライアントなら
character_set_server cp932
だめなら譲って
character_set_server utf8
に変えるのが得策と考えます。

もしかしてーデータベースサーバ、海外ですか。

y-enomoto @ mippi-mail.com wrote:
> 皆様昨日はご回答ありがとうございました。
> 
> Napuraです。
> 
>> 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 キャラクタセット名 ;を
>> 入れるでどうでしょう。
> SHOW VARIABLES LIKE 'character%' を試してみました。
> 結果は
> 
> character_set_client latin1 
> character_set_connection latin1 
> character_set_database latin1 
> character_set_results latin1 
> character_set_server latin1 
> character_set_system utf8 
> character_sets_dir /usr/share/mysql/charsets/ 
> 
> となりました。
> 
> SELECT version( ) では
> 
> 4.1.2
> でした。
> 
> DB接続直後に
> $rtn = mysql_query("SET NAMES utf8" , $con);
> を入れてみましたが
> insert***** values($Sno,'$v_no','$b_no','$p_name','$p_items','$SubX')";
> insert***** values($Sno,'$v_no','$b_no',CONVERT('$p_name' USING utf8),CONVERT('$p_items' USING utf8),'$SubX')";
> 
> で途中エラー
> 
> insert***** values($Sno,'$v_no','$b_no','`$p_name`','`$p_items`','$SubX')";
>> すべて文字化けとなりました。
> 
> phpの内部エンコーディングをutf8に指定しましたが
> mb_internal_encoding("UTF-8");
> 
> やはりすべて文字化けします。
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
> 


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