tamulab.jp

tamulabはプログラミングのtipsやインターネット上で気になったことなどを書き溜めています

MySQL の文字列カラムでの検索でハマった

calendar

reload

結論からさきに書くと文字列型のカラムに 0 という文字の入ったレコードを検索するときは文字列として検索しましょう
ってお話。

VARCHAR なカラムに 数字 又は 空文字、NULL のいずれかが入った次のようなテーブルがあります。

ここで point が 0 の件数だけを取得したくて次のような SELECT を実行します。

あれ?何故か 2 じゃなくて 3 となってしまいました。

なぜでしょうか?COUNT じゃなくてレコードを表示してみましょう。

おや? point カラムが空文字になっているレコードもマッチしてしまいました。

代わりに次のような SELECT だとどうでしょうか。

お、正しく point カラムに 0 と記録されているレコードだけになりました。
COUNT の場合も問題ないです。

文字列型のカラムに空文字が入っている場合に WHERE でエスケープせずに「数字の0」とした場合は、空文字にもマッチするようです。
ちなみにこれが 0 じゃない場合は問題ないみたいです。

というか対象のカラムが文字列型ならちゃんとエスケープした値で検索しろってことですよね。

※参考までに
空文字だけで検索するときちんと空文字のレコードだけになりますし、NULL の場合も IS NULL を使えば NULL のレコードだけになります。

この記事をシェアする

関連記事

No Image

[AWS][CloudWatch] MySQLのカスタムメトリクスを作ってみた
FuelPHP の ORM\Model での find(‘all’) について

No Image

AWS RDS から EC2 インスタンスに DB を移設

No Image

folder Amazon

Fire TV Stickがキタ━(゚∀゚)━!!
Amazonでウィンターセール開催中(1/16まで)
AmazonでCyberMondayセール開催中[〜12/12]
more...

folder AWS

[9/15まで] AWS 無料クーポンプレゼント実施中
[8/25まで] AWS 無料クーポンプレゼント実施中
t2.nanoインスタンスを調べてみた
more...

sponsored link

folder CentOS

No Image

No Image

No Image

more...

folder FreeBSD

No Image

No Image

No Image

more...

folder git

[git] tigのインストール

No Image

No Image

more...

folder JavaScript

No Image

No Image

more...

folder JAWS-UG

JAWS-UG Shimane vol.5やります

No Image

more...

folder kindle

まだあった、ImpressのKindle本50%オフセール(2/23まで)
翔泳社のKindle本が50%オフセール中(2/22まで)
Kindle本50%ポイント還元フェア(1/22まで)
more...

folder MySQL

No Image

No Image

No Image

more...

folder PHP

[Laravel5] Query Builder を使った時にどんなSQLになるのか知りたい
[FuelPHP] 配列の値を入れ替える
[FuelPHP] Arr::get() が便利すぎる
more...

folder Ruby

入門Redmine 第5版を読んだよ
RubyWorldConference2016の参加券が届いたよ
Redmine 3.2.1でチケットのコピーができなくなった(追記あり:2016-06-30)
more...

folder ShellCommand

ランダムな文字列を生成する方法

No Image

more...

folder subversion

No Image

No Image

No Image

more...

folder WordPress

マテリアル2にチェンジ
EWWW Image Optimizerで画像をスリムにしよう
WordPressの記事を Markdown記法 で書く
more...

folder モノ

今年買ったペンを比べてみたよ
セリアのフリーノートを買ってみた
more...

folder 未分類

Withingsのスマート体重計Body Cardio開封の儀
格安SSL証明書 CoreSSL を設定してみた【スクリーンショット多数】
StartSSLで発行した証明書がFirefox51で使えなくなった[追記: Chromeも]
more...