MW211 EXIT

devlog
MySQL/文字コード設定UTF-8
2011年12月01日
MySQLで、HTML側もDB側も「UTF-8」に統一されている環境なのに、
insertやupdateした時に、日本語文字が「????」とかに文字化けすることがある。

文字コードの設定が不完全だかららしい。
その設定方法にはいくつかある。
┌──────────────────────────────────────┐
│(1) mysql_set_charset('utf8');                                              │
├──────────────────────────────────────┤
│(2) $dbh->exec('SET CHARACTER SET utf8;');                                  │
├──────────────────────────────────────┤
│(3) $dbh->exec('SET NAMES utf8;');                                          │
└──────────────────────────────────────┘

最新でもっとも安全な策は(1)。
最新の環境であれば、(1)で解決。

…だが、PDOとは相性がよろしくないみたい(設定方法の問題か?)。
それと、PHPやMySQLのバージョンが古いと使えない。

ということで、(2)。(ま、これでいいんじゃないかな(本当か?))

(3)も結構有名だが、セキュリティ的にちょっと問題があるらしい。
いってみれば全体的に足並みを揃えての変更(設定)ではないため、
一部でボロが出てしまう恐れがある(つまり脆弱性)みたいなのだ。
但し、Shift-JIS系での話なのでUTF-8では気にしなくてもいいかも。
#ただ、UTF-8にしようとしてるけど環境がShift-JIS系とかいう場合に
  問題なのだろうか、よくわからない

もう少し勉強します。。。

なぜ、この問題にぶち当たったかというと、データベースの設定で
照合順序を「utf8_general_ci」にせず、デフォルトにしていたため、
DB側が「UTF-8」に統一されていなかった(らしい)というオチだったのだが。

このように前提条件が狂っている中だと、(2)を設定すると更新が文字化けして
逆に設定しないと参照が文字化けするという進退窮まることになってしまう。
基本は大事だね。
分類:PHP、MySQL