スイーツ(笑)と呼ばないで!!
| |||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||
11/24/05:31 [PR] |
07/24/13:00 MySQLのStrict Modeについていろんな事情があって、CentOS7以降だと、 MySQLではなくMariaDBがデファクト・スタンダートになったわけですが、 未だCentOS6系のサーバーでMySQLを動かしている人も多いでしょう。 今日はそんなMySQLのお話。 私は一時期DB系の研究を業務にしていた時期なんかもあったんですが、 そんな私から見るとMySQLは超怖いDBでした。 何が怖いって、varchar(50)とか定義したところに、60文字をPHPで投げつけても、 エラーも出さず知らん顔で50文字だけ格納して成功ステータス返す、そんな奴だったんです。 ちゃんと格納されたと思ったら、数日後に・・「あれ?文字が途中で切れてるぞ?」とかなるわけです。 もちろん、MySQLに渡す前にPHPでvalidationをきちんと書いてあれば、ちゃんとエラー制御できるんですけどね。 ただ、コンバートとかで直操作する必要があったり、validationの実装ミスに気づけなかったり、というのはかなり怖いですね。 まるで、コンパイル言語がコンパイル時にバグに気づけるのに、 非コンパイル言語では実行時エラーしかとれない、とかそんなのに近いです。 皆さん、仮に次のような二人の部下を持った自分を想像してください。 問題が発生した時に、 部下A:「うぉぉぉぉぉぉ!!!!!!・・・・・やっちまったぜ・・orz」と大騒ぎする部下 と 部下B: 「できました^^」と笑顔で報告して問題については何も言わずそのまま放置する部下 どっちが良いですか? 私は間違いなく前者の大騒ぎする部下ですね^^ で、そんなMySQLなんですが、実はちょっと前からsql_modeというのがあって、 そこでStrict Mode(正確にはSTRICT_TRANS_TABLES)を選択すれば、 ちゃんと「普通に」仕事してくれるようになります。 ただ、今までint型に空文字を投げていたプログラムなんかは、エラーになります。 まぁ、intに空文字投げちゃそもそもダメでしょ、と思うわけですが、 人によっては「君、わかってるねー、気が利くねー」と思ってたようで、 そんな人には不評なようです。 そんな中、時代は流れまして、MySQL5.6では、このStrict Modeがデフォルトになりました。 さぁ、大変です。 今まで、intに空文字なげていたようなプログラムは全部エラーで落ちまくることになりました。 焦って騒いだ世の中の人たちが取った行動は・・・ 「Strict Mode・・・オフればいいんじゃね? そうすれば、また、世界は平和に・・」 です。 皆・・・目に見えない問題は「=存在しない」と思うんですね。 そうして Strict Mode・・・オフ (←いまここ) というプロジェクトが世の中にたくさん出来上がったんです。 いや、intに空文字投げちゃうPGの発想、理解できないわけじゃないですよ。 テキストボックスで金額入れてもらうところとか、 普通にpostされたデータ見ると、nullじゃなくて、空文字ですもんね。 HTTPのプロトコルは、 最終的に文字列型で格納されるのか数値型なのかなんてpostする時点では知る手段はないので、 PHP側で適切に判断してあげるしかないですね。 HTML5が普及して、input type=“date”とか新しいtype属性が増えて、 今まで、selectボックスで年月日を指定させていたところ(必ず数値で受け取ってた)が、 見かけ上はテキストボックスみたいなUIになるので、 結果的に空文字が投げられることも発生するようになった、 なんて変化もあります。 date型に空文字、なんて事故も起こるようになりますね。 MySQLがシャキッとしてやっと普通のDBになってきたんです。 我々もちゃんと使ってあげましょうー ちなみに、余談ですが・・・ LinuxのセキュリティでSELinuxというのがあります。 より強固なセキュリティになる機能で、もう何年も前にデフォルトでオンになりました。 これ、結構安心できる機能なんです。 でも、ちょっとだけ設定や理解が複雑。 で、世の中の多くの人は 「えっとー、linuxセットアップするなら、最初にー、selinuxはオフにするのー」 と覚えて実行しています^^ SELinuxの話はまたどこかで記事にするかもしれません。 とりあえず、できるところから地道に取り組んでいくしかないですねー ローマは一日にしてならず!! ここ数日、毎日ブログ書いていて暇人だと思われている気がするので、今日はこんなところで^^ PR
|
|
|