MySQLとPHPでアプリを開発中です。
MySQLに登録済の日本語文字列データをPHPでselectして
echoを使ってクライアント(Windows XP)のブラウザに表示させると、
文字化けします。
全角文字がすべて半角の '?' になります。
MySQLの状態を調べるために以下を実行しました。
SHOW VARIABLES LIKE 'char%';
結果は以下のとおりでした。
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/local/mysql5.0.51a/share/mysql/charsets/
PHPの内部エンコードはUTF-8です。
php.iniの関連設定は以下のとおりです。
default_charset = "UTF-8"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.substitute_character = "none"
mbstring.encoding_translation = On
extension_dir = "/usr/local/lib/php/extensions"
extension=php_mysqli.dll
extension = gd.so
extension = mysqli.so
extension = xmlrpc.so
MySQLもPHPもすべてUTF-8で統一したので問題ないはずだと
思ったのですが?
半角アルファベットは問題なく表示されます。
サーバー側OSはSolarisです。
MySQLから正しくデータを得られていないように思えるのですが。
ヒントでも結構ですから教えていただけるとありがたいです。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
もしデータベース接続に MySQLi をご利用であれば、諸々のクエリを発行する前にデータベース接続の現在の文字コードセットを確認してください。
http://jp.php.net/manual/ja/mysqli.character-set …
標準的な環境であれば、返される文字列は latin1 となっているはずです。
次にやるべきことは文字コードセットの指定です。
http://jp.php.net/manual/ja/mysqli.set-charset.php
希望する文字コードセットにてデータベース接続が準備できましたので、目的のクエリを発行し、データを取得してください。
また、このような手順がわずらわしいと感じる場合、接続のオブジェクトを生成する前に各種設定を施すことが出来ます。
http://jp.php.net/manual/ja/mysqli.options.php
my.cnf に代わってアプリケーション用に準備した設定ファイルを読み込ませ、ここに予め接続の文字コードセットを指定しておくのが便利です。
例えば .my.cnf という設定ファイルを作成し、この中に [PHP] セクションを準備すると分かりやすいかもしれません。
参考URL:http://jp.php.net/manual/ja/book.mysqli.php
ありがとうございます。
ご指摘のとおりに文字コードセット関数を呼び出して設定したところ、
完全にうまくいきました。
あまりにもあっけなく解決したので、
自分の無知が恥ずかしくなりました。
改めて御礼申し上げます。
本当に助かりました。
No.4
- 回答日時:
データベース接続直後に、クライアント(PHPプログラム)から送信される文字コードをセットする必要があるのかも知れません。
DB設定直後に一度設定することで有効なので、接続したら必ず実行されるようにDB接続を関数化してそこに書き込んでおくのも有効かも知れません。
$db->query("SET NAMES utf8");
No.2
- 回答日時:
my.cnfの[mysqld]というセクションを探して下記を追記してください。
skip-character-set-client-handshake
mysqlの再起動、お忘れなく。
この回答への補足
利用しているレンタルサーバー業者に問い合わせたところ
MySQLへの環境設定変更はできないと言われました。
こちら側(ユーザー側)からMySQLをモディファイすることは
規則でできないそうです。
利用しているレンタルサーバーは、共用サーバーです。
また、他のユーザーさんからその苦情はきていないそうです。
他の手段はないでしょうか?
No.1
- 回答日時:
FORMで受け取ったテキストをコード変換せずにMySQLに格納しているということはありませんか?
MySQL格納と取り出しの部分の個^度を教えていただけないでしょうか。
この回答への補足
今はテストの段階で、MySQLへのデータ格納はphpMyAdminを使って
手入力で格納したものです。
取り出しの部分のコードは以下のとおりです。
$query2= "SELECT * FROM members_tbl WHERE delete_flg = 0 AND member_id =".$member_id." ;" ;
$res2= $db->query($query2);
if ($res2 == FALSE){
$msg = "DB query2 failure" ;
break ;
}else{
$row_cnt2= $res2->num_rows ;
if ($row_cnt2 == 0){
$msg = "no handle_name is found" ;
}else if ($row_cnt2 == 1){
$row2 = $res2->fetch_array() ;
$handlename = $row2['handle_name'] ;
}
echo ",".$handlename ;
上記のコードで、$handlenameには例えば"ひろし"のような全角文字列が
格納されるはずなのですが、"???"のようになってます。
半角アルファベットの場合には問題なく正しく格納されています。
ちなみに利用しているレンタルサーバー業者に問い合わせたところ
MySQLへの環境設定変更はできないそうです。
他のユーザーからその種の苦情もきていないそうです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP php エラー 2 2022/10/23 16:43
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP & MySQL: Server-side Web Development ペーパ 1 2022/04/19 19:23
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのWARNINGをcatchするには
-
お名前comのPHPとmysqlの接...
-
localhostにリダイレクトされて...
-
勉強の甲斐あっていよいよPHPフ...
-
pwebmanagerにアクセスするとFa...
-
データベースに接続できない・...
-
フォントの色を変えるには?
-
phpでPEAR::DBを使っているので...
-
別ファイルの変数を呼び出した...
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
バッチを用いたフォルダの自動移動
-
現在位置より2つ上のディレク...
-
CSV出力にHTMLが入ってしまう
-
「クラス関数」「メンバ関数」...
-
phpでメール送信できません 原...
-
one drive のアップロード失敗...
-
さくらサーバーにて、phpからメ...
-
index.phpに入るには、どうすれ...
-
php.ini を設定を変更すると再...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
お名前comのPHPとmysqlの接...
-
phpから、mysqlログイン時のユ...
-
XAMPPでSQL文を流すとフリーズ...
-
localhostにリダイレクトされて...
-
PHPのWARNINGをcatchするには
-
MySQLとPHPで日本語が文字化け...
-
lolipopでのmysql接続について
-
データベースと連動したベーシ...
-
PHP+MYSQL(MYSQLに接続できない)
-
pearDBでの接続エラー(mysqliの...
-
FedoraCore3 phpでのmysqlエ...
-
php.iniのMYSQLの部分ですが…ど...
-
データベースへの持続的接続
-
XserverでpearのDBでMySQLに接続
-
MySQLから送られて来たデータの...
-
JavaからMySQLへの接続
-
MySQLの文字化け
-
pwebmanagerにアクセスするとFa...
-
違うサーバにあるデータベース...
-
さくらvpsでのphpのmysqlの接続...
おすすめ情報