OracleのVARCHAR2で文字数指定で登録する方法

中山テック 代表の中山です。

備忘かつ専門的ブログのため、興味ない人は飛ばしちゃってください(汗

さて、今回はOracleをいじっている際に文字数で格納したいということがありました。

通常、マルチバイト文字(全角、半角カナ等)はSJISなら2バイト、UTF-8であれば

3バイトで表現され、データベースも3バイト文字として認識される可能性があります。

※サーバによる





DDL(CREATE TABLEと言ったデータ定義構文)で下記のように定義します。

カラム名 VARCHAR2(文字数 CHAR)

「USER_NAME VARCHAR2(40 CHAR)」であれば全角関係なく40文字まで格納できます。

つまり、マルチバイト文字を1文字として換算することが可能です。

どのような処理をしているかはわかりませんが、恐らくメモリ領域が多めに取られているのかと。

本来はVARCHAR2(120)と定義するのが正しいのでしょうが半角が120文字入る計算になります。

バイト数関係なく一定の文字数で実現したい時に使われます。

CHARとVARCHAR

余談かもしれませんが、CHARとVARCHARの違いは何かご存知でしょうか。

CHARは最大値40の場合、「1234567890」と入れたら後ろ30バイト半角スペースが入ります。

メモリは常に40バイトを取得します。

対するVARCHARは空白は付かず、文字数分の容量を取得します。

上記の数値であれば10バイトのみをメモリに格納。

ただし、カラムによってバイト数が変わるので処理に時間が掛かるデメリットがあります。

  • システム開発関連記事

使い方

CHARの使い道ないのではないか?と思う方もいらっしゃると思います。

しかし、フラグ(0~5とか)の場合は固定長のCHARが威力を発揮します。

固定で処理の早いCHARで1桁のフラグを作ることで処理速度を速めます。

対するVARCHARはユーザ名を入れると言った場合に使えます。

CHARで取ると後ろの空白まで取得し、アプリ側で空白を消すなどと言った処理が必要になり

更に処理に時間が掛かってしまいます。

それぞれの役割を適切に使うことが求められます。



まとめ

いかがでしたでしょうか。

と言っても代表の備忘ですのでメモ書き程度になってしまいましたが(汗

同じデータベースを使う者として、参考になったら幸いです。

※中山テックに掲載しているゲーム画像の著作権、商標権、その他知的財産権は、当該コンテンツの提供元に帰属します


  • 中山テック


チルさんデザイン

個人事業のシステムエンジニアです

前職はゴリゴリの営業マン(保険売りまくってた)

大抵のプログラミングはこなせます

環境構築もそれなりに出来るかと思います

これもエボンの賜物だな

趣味はゲーム、競馬、食べ歩き、旅行など

備忘と記録を残すためにブログを執筆しております




おすすめの記事