IT技術の痒い所に手が届く

詳細

×閉じる

VARCHAR2(10)で何文字挿入できるのか(ORA-12899)

Oracleで文字列を入れるための項目属性

Oracleのデータベースの項目属性を定義する時、VARCHAR2()があります。
VARCHAR2()は、可変長の文字列です。

()の中の数字が、挿入できるbyte数となります。
このByte数を超えると、ORA-12899値が大きすぎますというエラーがでます。

では、実際何文字入るのでしょうか。

VARCHAR()とVARCHAR2()は何が違うの?

本論に行く前に、少し余談です。

例えば、MySQLでは文字列の属性としてVARCHAR()があります。
しかし、OracleではVARCHAR2()です。

何故、Oracleはなのでしょうか?

実は、Oracleも以前はVARCHAR()で定義していました。
しかし、ある時から廃止になり、現在はVARCHAR2()のみが利用されています(経緯不明)。

OracleのVARCHAR2(10)は何文字入るのか?

では、本題に戻って
OracleのVARCHAR2(10)は何文字入るのでしょうか。

例えば、VARCHAR2(10)だったら、10byteのデータを挿入できます。
つまり、半角英数字だったら、10文字です。
半角英数なら、()の数字が、挿入できる文字数です。

問題なのが、漢字や平仮名は何文字入るのか?ということです。
これは一概には言えません。
例えば、Oracleの文字コードが「UTF-8」の場合、平仮名は3Byteとなっています。
だから、VARCHAR2(10)には、平仮名3文字+半角英数1文字が入ります。

Oracleの文字コードが「EUC-JP」の場合、
平仮名は2Byteとなっていますので、VARCHAR2(10)には平仮名5文字入ります。

また、漢字だと4Byteになっているので、挿入できる文字数が違ったものとなります。

このように、DBの文字コードによって、さらに、そのマッピングされた文字そのものによって、 VARCHAR2()は挿入できる文字数が変わってきます。

・・・・すみません、しまらない結論で(苦笑)。

※ちなみに、DBの初期設定のNLS_LENGTH_SEMANTICSをBYTE→CHARに変更すると、その文字数だけ挿入できるようになります。

MySQLのVARCHAR(10)は何文字入るのか?

参考までに、MySQLのVARCHAR(10)は簡単です。

MySQLの場合、全角だろうが半角だろうが10文字です。
簡単でしょ(笑)。

OracleとMySQLの違いも、少し意識しておきましょう。

Copyright(c) 2005-2020 SearchMan Sato . All Rights Reserved.