6698 二つの発見 はくぶん 2015-06-23 02:16:48
昨夜はいくつか新しい事を発見した一夜だった。

1)SQLのDSNにオプション設定項目
前々からあることは知っていたが、何に使うのかわからなかったので、設定した事がなかった。
昨夜、CGI側ではなくSQL側でUTFフラグをONに出来ること知り、俄然このDSNに興味が湧いた。
DSNのオプション項目に“mysql_enable_utf8”と記述すればいいらしい。
現在のスクリプトは、すべてCGI側でUTFフラグをONにしている。
今からすべてのDSN文を変更するのは面倒だし、エラーが誘発される恐れもあるので、次回何かを作る時から、SQL側でUTFフラグをONにするようにしよう。

2)UTFフラグをONにする
SQLから読み出したデータは、そのままだとUTFフラグがOFFのままだから、decodeしてUTFフラグをONにする必要がある。
SQLから読み出すデータは、配列になっていることが多いので、最近は配列のリファレンスで受け取るようにしている。
以前は配列で受け取っていたが、どこかのQ&Aサイトを見たとき、皆配列のリファレンスで受け、誰も配列で受け取っている人がいなかったので、そういうものなのかと思って、それ以降、俺も配列のリファレンスで受け取るようにしている。
配列で受けようと、配列のリファレンスで受けようと、その後にdecodeという作業が来るわけだが、decodeは変数単位(配列なら要素単位)の作業なので、配列を一発ドンでdecode出来ない。
俺はforのループで回して、要素単位でdecodeしていた。
しかし、map関数を使えば、一発ドンでdecode出来ることを知る。
一発ドンと言っても、実際には要素単位でdecodeしているのだが、ループで回すわけではないので、要素を一つずつdecodeしているという印象はない。
今まで4行使って書いていた部分が、1行で済んでしまった。
パフォーマンス的には変わらないのかもしれないが、コードが見た目にシンプルで美しい。

というわけで、昨夜はF1を観戦し、その後、ナショナルジオグラフィーを観ながら、二つの新たな発見を楽しんだのであった。
メッセージ文字数:887/907