先日、会社の後輩に作ってもらったストアドで、なぜか一部、ストアドで返ってくる結果のフィールド名が空白になってしまうという現象が発生しました()。
具体的には下記のようなSQLとなっていた。
SELECT fruit_id -- ID ,fruit_name -- 名前 FROM fruit
見てわかる通り、fruit_idのフィールド名は取得できているのだけど、fruit_nameのほうは空白になっている。試しに、コピペで順序を逆にしてみても、fruit_nameのほうが空白になった。
一見すると、何の変哲もないSQL。じっと見ていても何も分からなかったので、とりあえずコメントも消してみてもう少しシンプルな形にしてみようかと思ったときにちょっとだけ違和感。なんだかカーソルの動きが一部だけ大きいような……。
そう思って試しにテキストエディタに貼り付けてみたらわかりました。
fruit_nameのほうは、コメントの左側に全角スペースが入っています。
ただ、それでもなぜカラム名が空白になるのかすぐには分かりませんでした。何でこんな現象が起こるのかなと。
ですが、ちょっと考えてわかりました。これは、フィールド名は空文字ではなく、全角スペースになっているんだろいうことに。つまり、下記のようなSQLと同じようになっているということです。
つまり、別名をつけるASキーワードが省略されたと判断されて、フィールド名が全角スペースになっていたということです(今回試したのはMySQLですが、多分他のSQLでも同様の現象が発生するのではないかと思います)。
それにしても、なぜSQLはASを省略していいという仕様になったのだろうか。ASを省略しているSQLはよく見かけるけど、個人的に分かりにくいし、今回みたいによく分からないバグの原因にもなりかねない気がするのだけど。
コメント