次のSQL文を実行しました。最後のSELECT文で、どのような結果が返されますか。
CREATE TABLE codes (
c CHAR(5),
v VARCHAR2(5)
);
INSERT INTO codes VALUES ('AB', 'AB');
SELECT LENGTH(c) AS len_c, LENGTH(v) AS len_v FROM codes;ALEN_C:2、LEN_V:2
BLEN_C:5、LEN_V:2✓
CLEN_C:5、LEN_V:5
DLEN_C:2、LEN_V:5
正解:B解説
CHARは固定長の文字データ型です。指定したサイズより短い値を格納すると、右側が空白で埋められます。
一方、VARCHAR2は可変長のため、格納した値の長さのまま保持されます。
今回はCHAR(5)の列に'AB'を格納したため、'AB'の後ろに空白3文字が埋められて5文字になります。
SELECT LENGTH(c) AS len_c, LENGTH(v) AS len_v FROM codes;
LEN_C LEN_V
------ ------
5 2CHARとVARCHAR2の違い
| データ型 | 長さ | サイズ指定 | 短い値を格納したとき |
|---|---|---|---|
| CHAR(n) | 固定長 | 省略可能(省略時は1) | 右側を空白で埋める |
| VARCHAR2(n) | 可変長 | 必須 | そのまま格納する |