はじめに

Verticaの文字型のデータ長について記載します。

文字型のデータ長の指定

VARCHAR(10)やCHAR(10)のように文字型のデータ長を指定する数値があります。
この数値は、文字数なのかバイト数なのかというお問い合わせをよくいただきます。

文字型データ型(VARCHAR、CHARなど)で指定するデータ長は、「バイト数」になります。
「文字数」ではありません。

シングルバイト文字は1文字を1バイト、マルチバイト文字は1文字を3バイトとして計算します。
※Verticaがサポートするマルチバイトの文字コードはUTF8のみですので、1文字あたり3バイトで計算します。

例えば、VARCHAR(10)とした場合は、10バイトの文字データを格納できます。
これを文字数に置き換えると、以下のようになります。

シングルバイト文字:10文字
マルチバイト文字 : 3文字
シングルバイト文字とマルチバイト文字が混在する場合は、合計サイズが10バイトに収まるようにします。

実行例

以下にVARCHAR(10)のカラムに対して、シングルバイト文字とマルチバイト文字をINSERTする実行例を記載いたします。

[VARCHAR(10)のカラムを持つテーブルを作成]
dbadmin=> CREATE TABLE t1 (col1 VARCHAR(10));
CREATE TABLE


[シングルバイト文字10個の場合]
dbadmin=> INSERT INTO t1 VALUES (‘abcdefghij’) ;
OUTPUT
——–
1
(1 row)


[シングルバイト文字11個の場合]
dbadmin=> INSERT INTO t1 VALUES (‘abcdefghijk’) ;
ERROR 8682: String of 11 octets is too long for type Varchar(10) for column col1


[マルチバイト文字3個の場合]
dbadmin=> INSERT INTO t1 VALUES (‘あいう’) ;
OUTPUT
——–
1
(1 row)


[マルチバイト文字4個の場合]
dbadmin=> INSERT INTO t1 VALUES (‘あいうえ’) ;
ERROR 8682: String of 12 octets is too long for type Varchar(10) for column col1

このように、文字数ではなくバイト数で計算します。

■関連情報
Verticaでサポートされているデータ型

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。