人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでMySQLに日本語入力する方法。
sample.phpで$_GET[namae]したitem $item[namae]は、?namae=これはサンプル文章です とすると
print "$item[namae]"; で「これはサンプル文章です」と出力してくれます。

しかしながら、 UPDATE sampleDB SET namae = $item[namae] WHERE `key` = 1 と書きこむすると、
1‘?1‘?‰???‰‰?K/?”?wII?‘??w?????”?w_
のような感じ(上の文字化けは違う文字列入力によるものです。)となってしまい、
SELECT namae FROM sanpleDB WHERE `key` = 1の結果を連想配列$item[namae]に取り込んでprintしても、うまくいきません。

上記一連の流れを全て日本語で行うために必要なコード、もしくは参考ページを補足して頂ければ有り難いと思います。よろしくお願いします。

●質問者: ReoReo7
●カテゴリ:インターネット ウェブ制作
✍キーワード:Key MySQL PHP print SELECT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Galapagos
●25ポイント

PHPの内部コードは何でしょうか? UTF-8, SJIS, EUC-JP?

一方、MySQLの内部文字コードは何に設定していますか?

おそらく両者が違うために文字化けを起こしているのだろうと思います。

ご確認ください。


MySQLでデータベースを作成する際は、ふつう、CREATE DATABASE 構文で文字コードを指定してやります。

詳しくは「MySQL の日本語文字の扱いは OS に依存しないのか? 」を参照してください。

◎質問者からの返答

ありがとうございます。方針としてはUTF-8に統一していきたいと思います。

理由は、たまにサイトにアクセスするとアドレスバーにutf-8という文字列が入っているので、自動判別されたブラウザの文字列がそうでブラウザから帰ってくる文字コードもUTF-8と推測していることと、何よりMySQLがUTF-8のようだからです。

PHP;

default_charset=no value,no value(local,master)

mbstring.http_output=pass,pass

mbstring.internal_encoding=utf-8

スクリプトを保存する文字コード;SJISからUTF-8に変更しました。

MySQL;UTF-8 Unicode (utf8)

となっています。

default_charset=utf-8,utf-8

mbstring.http_output=utf-8,utf-8

とすれば良いんでしょうか、トライしてみます。ありがとうございました。

追記:

コメント欄のようにphp.iniを設定したのですが、MySQLに書き込む際に乱れてしまいます。

データベースにSHOW VARIABLES LIKE 'char%';を投げると

Variable_name Value

character_set_client utf8

character_set_connection utf8

character_set_database ujis

character_set_filesystem binary

character_set_results utf8

character_set_server utf8

character_set_system utf8

character_sets_dir /usr/local/mysql-src-5.1.22/share/mysql/charsets/

が出力されます。

これは、データベースに格納されるべき文字列がujisだからダメなんでしょうか?

追加質問となりますが、よろしくお願いします。


2 ● うぃんど
●50ポイント ベストアンサー

方法はいろいろあります

以下、推奨される順番に記述してあります

【1】データベース作成時に文字コードを指定

CREATE DATABASEに文字コードを指定する項目があります

http://dev.mysql.com/doc/refman/5.1/ja/create-database.html

http://dev.mysql.com/doc/refman/5.1/ja/charset.html

最初からクライアント側と文字コードを合わせてデータベースを作成しておけば、

データをやりとりする際の文字コード変換処理が不要になるため応答は当然ながら早くなります

以後はCREATE DATABASE時に文字コードを指定することを常に意識するようにしましょう

(そちらの状況はわかりませんが、データベースを新たに作り直したほうが楽かもしれないです)

【2】データベース接続直後にクライアントの文字コードを知らせる

前述したようなことはレンタルサーバなどでは無理な場合もあるでしょうし、

既に構築されているものをおいそれと変更できない場合もあることでしょう

そのような場合は下記のようなことが可能です

(1)phpのmysql_set_charsetを用いる(こちらを推奨)

$con = mysql_connect(省略);
mysql_selectdb(省略);
mysql_set_charset( 文字コード, $con ); 

http://www.php.net/manual/ja/function.mysql-set-charset.php

(2)SQLを用いる

SET NAMES='文字コード';

http://dev.mysql.com/doc/refman/5.1/ja/charset-connection.html

【3】MySQLの環境変数で指定

デフォルト設定を変えることもできますが、すべての接続に影響を与えてしまうので、あまり行いません

http://dev.mysql.com/doc/refman/5.1/ja/charset-connection.html

◎質問者からの返答

ご丁寧にありがとうございます。

上記コメントと重複するのですが、utf-8に統一するのがよさそうに思います。

紹介していただいたコードの例も大いに参考にしていきたいと思います。

【2】?1の範囲内で可能のように思っていますので、今後改訂を行っていきたいと思います。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ