思考停止するな

ネットワークとかアプリケーションとかWebとか

OracleのCREATE TABLE文のカラム定義のサイズについて

スポンサーリンク

最近Oracleを扱っていて長さの指定で困ることがあったので調べてみた。

OracleのCREATE TABLE文のカラム定義のサイズはバイトにするか文字数にするかを指定できるらしい。
デフォルトではバイト数(サイズの単位を省略するとBYTEとなる)となるらしい。

文字数でサイズ指定したい場合は以下のようにする。

列名 VARCHAR2(5 CHAR)

文字列の長さを求める関数は2つあるらしい。
LENGTH 関数
文字列の文字数を戻す。
文字列がCHAR 型(⇔VARCHAR2型)の場合には自動的に補完される後続のスペースも長さとしてカウントされる。

LENGTHB 関数
文字列のバイト数を戻す。
全角文字の場合には使用しているキャラクタセットによりバイト数は異なる。
UTF-8の場合は全角文字1文字が3バイトとなる。

主なデータ型の説明は以下にまとめてみた。

CHAR 固定長の文字列を格納。CHAR列の文字列の長さを1~2000までの値で指定する必要があります(単位はバイト数または文字数)。デフォルトは1バイト。固定長にあわせて空白が補完される。
VARCHAR2およびVARCHAR VARCHAR2データ型には、可変長の文字列が格納される。文字列の最大長を1~4000までの値で指定します(単位はバイト数または文字数)。空白は補完されない。VARCHARデータ型は、VARCHAR2データ型と同義。そのため、可変長の文字列の格納には常にVARCHAR2データ型を使用するようにする。4000CHARのカラム定義はできるが、4000文字に達していなくても4000バイトに達した時点でエラーとなる。
NCHARおよびNVARCHAR2 Unicode文字データを格納するUnicodeデータ型。キャラクタセットは、AL16UTF16またはUTF8のいずれか。NCHAR列の最大長は2000バイト。NVARCHAR2列の最大長は4000バイト。
NUMBER 固定小数点数および浮動小数点数が格納される。最大38桁の精度。
DATE DATEデータ型には、年(世紀を含む)、月、日、時、分および秒(真夜中から数える)が格納。

SQLServerについても同様のことについて調べたのは以下。
http://shimonss.hatenablog.com/entry/2017/05/28/102205shimonss.hatenablog.com