PHP5.4.30 + MySQL5.6.19で文字化けに対応。

ちなみに、PHPからは以下のようにつないでいます。

// PDO接続(PHP 5.3.6以降だとcharsetが使えます
$dsn="mysql:dbname=%s;host=%s;charset=utf8";

文字化けする環境と、/etc/my.cnfに対応したもの

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.19, for Linux (x86_64) using  EditLine wrapper

$ php -v
PHP 5.4.30 (cli) (built: Jun 25 2014 15:27:51)

$ yum list installed | grep mysql
mysql-community-client.x86_64        5.6.19-2.el6    @mysql56-community
mysql-community-common.x86_64        5.6.19-2.el6    @mysql56-community
mysql-community-devel.x86_64         5.6.19-2.el6    @mysql56-community
mysql-community-libs.x86_64          5.6.19-2.el6    @mysql56-community
mysql-community-server.x86_64        5.6.19-2.el6    @mysql56-community

$ find / -name libmysql*
/usr/lib64/mysql/libmysqlclient_r.so.18.1.0
/usr/lib64/mysql/libmysqlclient_r.a
/usr/lib64/mysql/libmysqlclient_r.so
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.a
/usr/lib64/mysql/libmysqlclient_r.so.18
/usr/lib64/mysql/libmysqlservices.a
/usr/lib64/mysql/libmysqlclient.so
/usr/lib64/mysql/libmysqlclient.so.18.1.0

$ php -r "phpinfo();" | grep "PDO"
PDO
PDO support => enabled
PDO drivers => mysql, sqlite
PDO Driver for MySQL, client library version => 5.6.19
PDO Driver for SQLite 3.x => enabled

こっちでは

# /etc/my.cnfの文字コード
character-set-server=utf8
skip-character-set-client-handshake #超だいじ

普通に文字化けしない環境の設定情報

$ cat /etc/redhat-release
CentOS release 6.5 (Final)

$ mysql --version
mysql Ver 14.14 Distrib 5.6.12, for Linux (x86_64) using EditLine wrapper

$ php -v
PHP 5.4.29 (cli) (built: Jun 5 2014 16:07:48)

$ yum list installed | grep mysql
mysql-libs.x86_64 5.5.32-1.el6.remi @remi
php-mysql.x86_64 5.4.29-3.el6.remi @remi

$ find / -name libmysql*
/usr/lib64/libmysqlclient_r.so.12
/usr/lib64/libmysqlclient_r.so.18.0.0
/usr/lib64/mysql/libmysqlclient_r.a
/usr/lib64/mysql/libmysqlservices.a
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.a
/usr/lib64/mysql/libmysqlclient.so.18.0.0
/usr/lib64/libmysqlclient.so.16
/usr/lib64/libmysqlclient.so
/usr/lib64/libmysqlclient.so.15.0.0
/usr/lib64/libmysqlclient_r.so.15
/usr/lib64/libmysqlclient_r.so.14
/usr/lib64/libmysqlclient_r.so.14.0.0
/usr/lib64/libmysqlclient_r.so.16.0.0
/usr/lib64/libmysqlclient.so.15
/usr/lib64/libmysqlclient_r.so.18
/usr/lib64/libmysqlclient_r.so
/usr/lib64/libmysqlclient.so.16.0.0
/usr/lib64/libmysqlclient_r.so.16
/usr/lib64/libmysqlclient.so.14.0.0
/usr/lib64/libmysqlclient.so.18
/usr/lib64/libmysqlclient_r.so.15.0.0
/usr/lib64/libmysqlclient.so.14
/usr/lib64/libmysqlclient.so.12.0.0
/usr/lib64/libmysqlclient.so.18.0.0
/usr/lib64/libmysqlclient_r.so.12.0.0
/usr/lib64/libmysqlclient.so.12

$ php -r "phpinfo();" | grep "PDO"
PDO
PDO support => enabled
PDO drivers => mysql, sqlite
PDO Driver for MySQL => enabled
PDO Driver for SQLite 3.x => enabled

PDO Driver for MySQL => enabled…? でも動いているんですよねー…。 ↓ ↓ ↓

# /etc/my.cnfの文字コード
character-set-server = utf8

ちなみに、両方ともMySQL Workbenchやコマンドラインから見るとこうなんだけど
mysql> show variables like "%character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
+--------------------------+----------------------------+
文字化けするほうをPHP通して出力すると以下のようになってました。
character_set_client | <strong>latin1</strong>
character_set_connection | <strong>latin1</strong>
character_set_database | utf8
character_set_filesystem | binary
character_set_results | <strong>latin1</strong>
character_set_server | utf8
character_set_system | utf8
character_sets_dir | /usr/share/mysql/charsets/

//化けた文字をmb_detect_encodingしたもの
index.php#37string(8) "SJIS-win"

インストールしたときにシステムのタイムゾーンUTCだったのとかが関係あるのだろうか。
(途中から/usr/share/zoneinfo/Japanや、/usr/share/zoneinfo/Asia/Tokyoに変更したりした)

やれやれだぜ。

ソフトバンクユーザーがEvernoteの2段階認証するとき。

二段階認証の手続き中に、携帯電話にSMSが送られてきます。
が、届かない…!
ってときには、
迷惑メール設定を見直しましょう。

20140126-034810.jpg

20140126-034825.jpg

20140126-034848.jpg

20140126-034905.jpg

次の画面で、再度「設定する」を押すのお忘れなく。

これでSMSが無事届くようになりました。

このやりとりは初回だけなので、終わったら設定を拒否に戻して大丈夫ですよ!

Windows8.1でMacbook Air(だけじゃないかも)が熱暴走する件

状態

ひどいときは起動直後イベントビューアを見ようとしている間に死んでいる。
本体ファンが全力で回っている。
起動中のアプリケーションは終了できるのに、新しく起動はできない。
壁紙真っ白になる。
S.M.A.R.TによるとSSDが60度近くになっていた。(でもこれは部品近いしね)
電源以外のデバイスがつながっていてもいなくてもなる。
Wifiがオフラインかどうかも関係なし。

入力を受け付けないので、電源ボタンを長押しするよりほかに方法がありません。

※ちなみにセーフモードも試したかったけどうまく起動してくれなくて積んでました。

確認事項

Windows7→Windows8アップグレード版→8.1
Bootcampはv5.0

かろうじて電プチ前のログをたどれた時に、システムログで警告が出ていました。

デバイス ACPI\ACPI0008\4&178f8e12&0 のドライバー \Driver\WudfRd を読み込めませんでした。

対処

http://y188ra.blogspot.jp/2013/11/driverwudfrd.html

こちらを参考にサービスの設定を変更します。

Windows Driver Foundation - User-mode Driver Frameworkを探す
Windows Driver Foundation – User-mode Driver Frameworkを探す
手動(イベント起動)から「自動」に変更
手動(イベント起動)から「自動」に変更

これだけ。

二度見するぐらいこれだけ。

なお、設定変更のOKボタンを押すまでに2回症状が出て電プチしてます。
プチると内蔵ファンも止まり熱が逃げないので、リトライの際には良く冷ましてから挑むことです。

メモ

Windows8→8.1にアップデート失敗、リトライで成功した直後に、デバイスドライバ周りのトラブルが頻発しました。
でもって、この設定を行って安定していました。

いつ設定値が変わった(戻っていた)のか謎です。
うっかり復元でもしたのか、少し前のアップデート時に勝手に変更され、一時期安定してただけなのでしょうか…。

心当たりといえば、前日くらいに間違って休止状態にしたような…(未検証です

ちなみに、8.1にした直後にはこんなのもありました。

modern.IEの仮想環境でセッションが立たないときは、時刻の設定を確認

Internet Explorer の検証がより簡単に | modern.IE

で旧IEから最新ベータ版まで、公式純正の仮想OS用イメージが落とせます。

ここから入手したものは、英語版で、タイムゾーンがUSです。

だから、セッション有効期間の設定が時差以下だと、発行したセッションcookieが

時すでに時間切れ

でログインできませんでした。

タイムゾーンを変更して、時間をあわせる

スクリーンショットは日本語版Windows8.1のものですが、WindowsVista/Windows7もボタンの配置は一緒です。

タスクバーの時計表示部分クリックするか、コントロールパネルから日付と時刻の設定画面を開いて、

スクリーンショット_121213_052832_AM
タイムゾーンを設定
スクリーンショット_121213_052909_AM
NTPと同期(1)
スクリーンショット_121213_052921_AM
NTPと同期(2)

をしておきましょう。