Archive

Archive for May, 2006

char 型と varchar 型の違い

May 30th, 2006

データベースの char と varchar の違いについて気になったので調べてみた。

まず基本は char は固定長であり、varchar は可変長である。

char 型のカラムに指定サイズに満たないデータを入れた場合、不足バイト分のスペースで埋められる。たとえば、8 バイトの char 型のカラムに「test」という文字を挿入すると、データベースには「test____」(_はスペース)というデータで格納される。

一方、varchar 型のカラムに指定サイズに満たないデータを入れても、不足バイト分をスペースで埋められない。
128 バイトの varchar 型のカラムに「test」という文字を挿入しても、「test」というデータが格納される。

char 型と varchar 型をどう使い分けるのが良いかというのは DB アドミニストレータとプログラマの視点によって変わってくる。

char 型のカラムはデータ挿入時に指定サイズ分が記憶領域に確保されるが、varchar 型のカラムでは必要な分のみ確保される。
varchar 型のカラムのデータを格納されているデータより大きなサイズのデータに更新しようとしたときに、再度記憶領域のサイズを確保する処理が行われる事がある。
パフォーマンスに敏感になっている DB アドミニストレータからしてみると、この些細な点でも気になることだろう。

しかし、プログラマからしてみると char 型のサイズの不足分がスペースで埋められる点がかなり痛い。
先ほど挿入した「test」という文字を検索条件にクエリを発行しても、ヒットしない。なぜなら、検索する場合は「test____」というスペースを含めた文字で検索する必要があるからだ。この事から少しでもプログラマは varchar 型で定義して、早く実装して幸せになりたいだろう。OR マッピングが色々な言語で使える環境が揃ってきて、こういう細かい事を気にする必要が無くなってきた感があるかもだけど、やはりこういう細かい点は見逃せない。。。

使い分ける場面としては電話番号などの長さが必ず固定である場合は char 型、コメントなどのデータによって長さが変わってくる場合は varchar 型を使うって感じだろか。

ちなみに Oracle の varchar には varchar と varchar2 があるが、それぞれ、254 バイト以下、4000 バイト以下の可変長文字列を表す。

データベース, プログラミング

リストから配列に変換する

May 29th, 2006

JavaのListクラスから配列に変換するメモ。

List list = new ArrayList();
String[] s = (String[]) list.toArray(new String[0]);

よく忘れちゃうからメモ。

Java, プログラミング

はてなで紹介されました。

May 17th, 2006

この エントリー のはてなブに Google キャッシュを追加するグリースモンキーをはてなに投稿したところ、はてなのグリースモンキーのページで紹介されました。うしし。

firefox