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

y-enomoto @ mippi-mail.com y-enomoto @ mippi-mail.com
2007年 3月 13日 (火) 15:09:53 JST


皆様昨日はご回答ありがとうございました。

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