表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。

【番外編】ライトノベルで学ぶMySQL入門~クリスマスにWHERE句で暗黙のキャスト~

作者: 野宮諒

今回はMySQLでWHERE句を使うときの「便利とも言えるし、ちょっと危なっかしいんじゃないの?」といった仕組みについてお話を展開できればと思います。

今日は12月24日。1年もあっという間に終わりそう。もうすぐクリスマスである。

部室に入ると既にそこには偉い偉い部長さんである真琴が……。


黒板に立派なロゴで『メリークリトリス』と書いていた。


「ってお前、黒板に何書いちゃってるの?」

「これって今しかできないでしょ?今でしょ、今でしょ?」

「ああ、それ微妙に懐かしいw」

「ああ、そう言えばトリスウィスキー、そこのロッカーに入ってたからコウタ取ってきて!」

俺はやれやれと思いつつ、ロッカーに向かうと別の部員が部室のドアを開けた。

「愛華ー、お疲れー」真琴が声をかける。

「皆さんのお願いがありますッ」

愛華は唐突にカバンからノートPCを取り出し、起動した。

そしてMySQLにログイン。


「取り合えずいくつかケーキをテーブルに追加してみたんですよ」

愛華がノートPCを俺たち部員に見せつけた。

愛華はケーキ屋のバイトをしているので、この時期は特に忙しいはずだ。

そして愛華がそのテーブルの中身を表示してみた。


SELECT * FROM cake;


id|name|price|stock

0|ichigo|1000|20

1|mikan|500|30

2|tomato|500yen|10

3|maguro|800yen|80


「ええと、ケーキの名前、値段、そして最後が在庫かな?」

真琴がモニターをのぞき込む。

「なんだこのケーキ、最後にマグロとかあるぞ。それに在庫一番多いし」

誰もツッコまないようなので、俺は思わずツッコんでしまった。

「コウタ、知らないの?マグロケーキが肩コリに効くって『水曜健康ショー』でやってたのよ?」

と、真琴。

「それで、このテーブルがどうしたの?」

真琴が話を本題に戻す。

「それが、priceのカラムをtext型にしちゃったせいで500が入ったり、500yenが入ったりしちゃって、

500円のケーキの検索でこんなSQLを発行することになっちゃうんです……」


SELECT * FROM cake WHERE price = '500' OR price = '500yen';


id|name|price|stock

1|mikan|500|30

2|tomato|500yen|10


「price = '500'って入れたあとに、同じようなprice = '500yen'を入れるのが面倒と?」

俺は聞いてみた。

「そうです」

「なーんだ、そんなこと?簡単な解決方法があるわ。ちょっとPC触らせて」

カタカタと真琴は、愛華のノートPCのキーボードを叩く。


SELECT * FROM cake WHERE price = 500;

id|name|price|stock

1|mikan|500|30

2|tomato|500yen|10


「「あれっ?」」

俺と愛華は顔を見合わせる。

「MySQLでは、WHERE句で数値と比較したときに対象のカラムの値を勝手にキャストして数字にしちゃうの。

だから数字の500と比較すれば、つまりシングルクォートとか付けないで比較すると500も500yenも

引っかかるわ」

「あっ、そんなことできたんですね~。助かりました!!」

「んー、でも挙動がちょっとバグっぽいよなぁ。引っかかっちゃいけない場合に引っかかる可能性も

あるってこったな。これはこれで気を付けないと」

「そうね。カラムの型がtextとかの文字列だったら、比較に使う文字もちゃんと文字列で比較するのが必要よ。

とりあえず解決したからトリスウィスキーでハイボール作りなさいッ」

「クリスマスからのトリスウィスキーとは、なかなか強引な展開だな……」

いかがでしたか?

MySQLでWHERE句を使うとき、数字と文字列を比較する場合に「あれ?」と思われるような現象があるというのをネタにストーリーを展開してみました。

結構知らないとハマるパターンなので気を付けましょう。

そして良いクリスマスを~!

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
[一言] 私はデータベースに関しては素人なのですが "500yen"だから良いものの、"\\500"とか入力されてたらどうしようもないよね 正規表現か何かでうまいこと数字部分だけ取り出せればいいんだけ…
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ