MySQL との接続に文字コードを指定する



今までMySQLの文字コードを意識せず・・・つまりlaten1で
見かけ上動いていたPHPのアプリケーションがありました。

思い切って、テーブルの内容をutf8にコンバートしたのですが、
案の定日本語が文字化けします。

別なアプリケーションが動いていたりするので、できるだけ
MySQLの設定を変更せずに、PHPのプログラム改修でなんとか
ならんものかと調べてみると、所々で

「SET NAMES utf8のクエリを投げればよいよ。」

という記述を見つけました。

早速、

mysql_query("SET NAMES utf8")

としてみたのですが、効果なし。


やっぱり駄目なのかなとあきらめていると

http://bono.s201.xrea.com/2006/03/11-utf8_xrea_3/


ひょっとして・・・

$con = mysql_connect("localhost", "root", "password")
mysql_select_db("db_name")
mysql_query("SET NAMES utf8", $con);

このコードでできました。

mysql_queryの引数に$conを渡すと、何が変わるんだろ?


ちなみに、その後Content-Typeのcharsetが
shift_jisになっていたので、
もutf8に変更しなきゃと思って

「utf8」

と書いてしまい、はまりました。
正確には

「utf-8」

ですね。


それと、phpのソースも全部utf8に変換したのですが、
BOM付きで保存してしまい、

header("Location: index.php");

の記載がある箇所でエラーになることでもはまりました。
PHP、BOMはごみとして判定してる?


文字コード、やっぱり難しいですね。




もどる