塚原 大祐

2012.04.11

MySQLの意外な?仕様

はじめまして。
システム内では完全に変態扱いの塚原です。

お花見の季節ですねー。
皆さんはご友人、会社でされましたか?

弊社は昨日行いましたw
平日だったので来られない方もいましたが、
参加者も多く結構盛り上がりました。
全社でワイワイするのも大事だなぁと思った今日この頃です。

さて、ここで技術的なことをひとつ。
先日ちょっとハマったことがあったので書きます。

画面で入力した値が存在しているかのチェックの仕組みを
確認していたときのこと。
MySQLを使っているのですが、

テーブル名: _TABLE

ID
A[スペース]

というデータが入力値’A’の場合に存在していると判定されてました。
調査してみると、
INSERTの時点でtrimしてないことがそもそもの原因じゃ。。。
っていうのははおいておいて、このデータが

SELECT * _TABLE WHERE ID = ‘A ‘;

で取得できるのはわかるのですが、

SELECT * _TABLE WHERE ID = ‘A’;

のSQLで取れてしまうのです。

書き方が悪いんじゃないかとか、
phpMyAdminでSQLを実行してたので、その仕様だろうと思い、
mysqlクライアントで実行しても同じ。。。とか、
いろいろ試した上、何故かN君の周りを数人が取り囲むという事態にまで発展し、
検索して出てきた答えがこれ。

http://www.dbonline.jp/mysql/type/index3.html

VARCHAR型だと
格納と取得は、末尾の空白がついたままですが、
WHERE句で比較するときだけ末尾の空白を削除した上で比較されるとのこと。

末尾の空白を削除して比較してくれるとか。。。優しすぎる。。。
良かれと思ってやったことが実は無駄だったってことよくありますが、
他の理由はあるにせよ、まさにそれを食らった感じでしたw

いやー無知でお恥ずかしいところですが、
普段使っているものでも、意外と知らない仕様があるので
もっと勉強しないとなぁと改めて思いました。

日々精進しますっ!

アライドアーキテクツでは、一緒に働く仲間を随時募集しています。是非一度採用サイトを覗いてみてください。お待ちしております。

塚原 大祐

名の由来は「天祐」。 そのままではおこがましいので 天の字から1本棒をとればと叔父がつけてくれたもの。 名に恥じぬよう世の中の助けとなるものを創り出していきたいです。 for Facebookのサポート・運用開発の部隊に所属しています。

RELATION ENTRY

塚原 大祐の記事一覧へ

▶︎