不親切なVARCHAR2

 文字数なのか文字バイト数なのかという話はシステム開発をやってて良くあるかと思います。これらをカッコよく呼ぶには、キャラクタ・セマンティクスなのか、バイト・セマンティクスなのかと言い換えれる様です。

Oracle Database 概要 11gリリース1(11.1) 文字データ型の長さセマンティクス」
http://docs.oracle.com/cd/E16338_01/server.112/b56307/ch2charset.htm#i1006683

 キャラクタ・セマンティクスにする事で、VARCHAR2(1000)とした場合は、1000バイトの文字列が入るのではなく、1000文字の文字数が入ります。

 で、てっきりVARCHAR2(4000)まで定義可能なのかとあまり調べてなかったら、実はそうではなかったのかと。
 よくよくマニュアルを読んでみると、以下の様な書きっぷり。

文字での最大長と関係なく、VARCHAR2データの長さは4000バイト以下になります。

Oracle Database SQL言語リファレンス 11g リリース1(11.1) 2 Oracle SQLの基本要素 VARCHAR2データ型」
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05750-03/sql_elements.htm

 まぁシステム的な制約考えると分からないでもないが、UTF-8みたいな可変長な文字列扱えるのに、いつまで眠たいこと言ってるんだというのが正直なところ。こういう細かい制約があるので、トラブルが生まれて、でも製品知らないおまえが悪いみたいな事が各地で起きてるんやろなと。。。
 ちなみにいざという時はLONGに置き換えてもええのかと思いつつ、まずはそうならんような見積もりせんといかんのかなぁと。
 後、char型は2000バイトの様です。

CHAR列のデフォルトの長さは1バイトで、この許容最大値は2000バイトです。

モッピー!ポイ活応援ポイントサイト