« 台風13号 | Main | 携帯変えた »

2006.09.23

データベースのCHAR型

 例えば、sampleというテーブルにおいてhogeというchar型のフィールドがあった場合、例えば以下のようなselect文が書けます。

 select * from sample where hoge='10'

・・・が、最近のデータベースは、

 select * from sample where hoge=10

なんてのも受け付けるようになっているんですね。自動的なキャストで、建前としては(?)「容易性」ってことになっているようです。つまり、数値型だとシングルクォーテーションは不要なのに文字型だけ必要なのは間違えやすい、ってことなんでしょうか。

 まぁ、それはそれでありなのかもしれませんが・・・個人的には逆にしょーもないミスで悩む人も増えてしまうような危険性もあるのでは、と思ったりもします。
 例えば、hogeというフィールドにおいて'hoge'という値を条件で検索する場合、

 where hoge=hoge

って書いてしまうと、hogeというフィールドの(各レコードの)値なのか、特定の値なのかが分からなくなってしまいません?

 前者の解釈になってしまうと、全レコードがヒットしてしまうこととなり、'hoge'という値で検索しようと思っていた人の期待値と異なる結果が得られることになってしまいます。
 あとは、自動キャストをサポートしていないDBでSQLエラー連発とか(^^;; まぁ、この辺はDBの方言の範囲内と言ってしまえるのかもしれませんが。

#ただ、もしかしたら自動キャストが有効なのは、検索条件の値が数値だけの場合だったりするのかもしれませんが(手元に環境がないのでテストできない)。

|

« 台風13号 | Main | 携帯変えた »

DB」カテゴリの記事

Comments

 自動キャストが効くのは(とりあえず普段使用しているデータベースでは)数値を使用した場合のみのようです。

 hoge=1 とか hoge='1'、hoge='fuga' はOKですが、hoge=fugaは"fugaというカラムがない"とエラーが出ました。

 ま、そんなもんでしょう。

Posted by: syo | 2006.10.01 at 21:31

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/12004980

Listed below are links to weblogs that reference データベースのCHAR型:

« 台風13号 | Main | 携帯変えた »