へっぽこITエンジニア@名古屋のブログ

Follow me on GitHub

varchar2のchar修飾子

今回はOracleの話です。

Oracleの可変長の文字列varchar2について
byte修飾子、char修飾子の場合に気を付けることを書こうと思います。

byteの場合に気を付けること

Oracleでvarchar2(10)やvarchar2(10 byte)と指定すると10byteまで登録できます。

byteなのでUTF-8だと数値や記号などは1byteですが全角や半角カナは3byteになります。

あまりないかもしれませんがOracleの文字をSJISにしていれば半角は基本1byte、全角は基本2byteになるのですが、 髙(梯子高)などの特殊文字は1byteです。

なので文字数や文字幅などで合わせようとすると、プログラムによるカウントが必要になってきます。 正確にやろうとすると結構大変w

byte数でカウントすればいいじゃないかという方もいますが、会社でよくあるのがbyteじゃわかりにくいから文字数や文字幅(半角は1、全角は2)でカウントしてほしいという要望が来ます。安易に受けるとえらいことに・・・

また、最大は基本的に4000byteです。 それ以上を指定すると、「ORA-00910: 指定した長さがデータ型に対して長すぎます。」となります。

12cだと4000byte以上に拡張できるそうです。

charの場合に気を付けること

なので「varchar2(10 char)」とすると10文字を入れることができます。 バイト数は関係ないです。

ただし、少し気を付ける必要があります。

  1. 改行が2文字となってしまう。
  2. varchar2(4000 char)と指定できるが4000byteまでしか入れられない。

1つ目ですが
改行が\r\nだと2文字カウントになってしまうようです。
なのでtextareaなどで改行を入れられるところは気を付ける必要があります。

2つ目ですが
4000charと指定しても4000文字入れられるわけではないようです。 こちらも4000byteの規制はかかっていて、それを超えることはできません。 なので、あまりに大きいとバイトも考慮する必要があります。

まとめ

Oracleでvarchar2ではバイト数と文字列数で上限を指定できますが、 それぞれ気を付けることがあります。 それぞれの気を付けるポイントを押さえて利用してください。

あと、安易に文字数や文字幅でカウントしてほしいという要望を受けると、えらいことになるので気を付けてください。 わかりづらいかもしれないけど、必須ではないですよね。

作成日:2021-08-20  更新日:2021-08-20