[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 メーリングリストの案内