全然知らなかったのですが、今時ってVARCHAR2(5)とかの時に
全角半角問わず5文字入るんですね。
っていうのがこの話の発端です。
これは実はセマンティクスという物に依存しているようです。
今までは全角だとDBの項目長の半分までしか入力できないっていうのが
当たり前なシステムばっかやってたのでセマンティクスなんて知りませんでした。
セマンティクスにはバイトセマンティクスと文字(キャラクタ)セマンティクスがあり、
バイトの方が私が今までやってた方で、今回知ったのがキャラクタの方です。
キャラクタの方は文字数をベースとしているので5文字までだったら
全角も半角も5文字までは入るようです。
バイト指定の方はバイト単位で指定するので文字数制限がかかってきますが、
キャラクタ指定だと文字数制限はかからない分バイトがかさみそうです。
セマンティクスはNLS_LENGTH_SEMANTICSという初期化パラメータで設定されるらしく、
デフォルトではバイトのようです。
ちなみに余り見かけないNVARCHAR2というのはキャラクタセマンティクスで定義した
VARCHR2のようです。
つまり文字数で指定するタイプですね。
VARCHAR2自体もVARCHAR2(5 CHAR)とかすると
キャラクタセマンティクスになるみたいです。
キャラクタセマンティクスだとHTMLのmaxlengthとVARCHAR2で指定するサイズが
一致するので分かりやすいですね。
あと、Java側もただのlengthでいいし。
PR