文字データ型

文字データ型は、文字(英数字)データをデータベース文字セットまたはUTF-16書式で格納します。文字データはバイト値を使用する文字列に格納されます。バイト値は、データベース作成時に定義されるデータベース文字セットのいずれかに対応しています。シングルバイト文字セットとマルチバイト文字セットの両方がサポートされています。

文字データ型には次のものがあります。

CHAR

CHAR型は、固定長文字列を指定します。CHAR列に値を挿入する際、定義されている列長よりその値が短い場合は、列長にあわせてTimesTenの空白文字が埋め込まれます。CHAR列に値を挿入する際に、その値が定義されている列長より長い場合は、エラーが戻されます。

デフォルトでは、列長はバイトで定義されます。CHAR修飾子を使用し、列長を文字で定義します。文字のサイズは、データベース文字セットに応じて1バイトから4バイトの範囲になります。BYTE修飾子およびCHAR修飾子は、NLS_LENGTH_SEMANTICSパラメータ設定より優先されます。NLS_LENGTH_SEMANTICSの詳細は、「ALTER SESSION」を参照してください。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「グローバリゼーション・サポート属性の設定」も参照してください。

ノート:

CHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_CHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。CHARTT_CHARの両方で、空白埋め比較セマンティクスが使用されます。TT_CHAR型は下位互換用にサポートされています。

次の例では、表を作成します。列は型CHARおよびTT_CHARを使用して定義されます。これらの型では、空白埋め比較セマンティクスが使用されます。

Command> CREATE TABLE typedemo (name CHAR (20), nnme2 TT_CHAR (20));
Command> INSERT INTO typedemo VALUES ('SMITH     ','SMITH     ');
1 row inserted.
Command> DESCRIBE typedemo;
Table USER.TYPEDEMO:
  Columns:
    NAME                            CHAR (20)
    NAME2                           TT_CHAR (20)
1 table found.
(primary key columns are indicated with *)
Command> SELECT * FROM typedemo;
< SMITH     , SMITH      >
1 row found.
Command> -- Expect 1 row found; blank-padded comparison semantics
Command> SELECT * FROM typedemo WHERE name = 'SMITH';
< SMITH     , SMITH      >
1 row found.
Command> SELECT * FROM typedemo WHERE name2 = 'SMITH';
< SMITH     , SMITH      >
1 row found.
Command> -- Expect 0 rows; blank padded comparison semantics.
Command> SELECT * FROM typedemo WHERE name > 'SMITH';
0 rows found.
Command> SELECT * FROM typedemo WHERE name2 > 'SMITH';
0 rows found.

次の例では、表typedemoを変更し、列name3を追加します。列name3は、文字セマンティクスで定義されます。

Command> ALTER TABLE typedemo ADD COLUMN name3 CHAR (10 CHAR);
Command> DESCRIBE typedemo;
Table USER.TYPEDEMO:
  Columns:
    NAME                            CHAR (20)
    NAME2                           TT_CHAR (20)
    NAME3                           CHAR (10 CHAR)
1 table found.

NCHAR

NCHARデータ型は、2バイトのUnicode文字の固定長文字列です。NCHARデータ型は、Unicodeの空白文字U+0020 SPACEを使用して指定した長さまで調整されます。空白埋め比較セマンティクスが使用されます。

ノート:

NCHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。NCHARTT_NCHARの両方で、空白埋め比較セマンティクスが使用されます。TT_NCHAR型は下位互換用にサポートされています。

NCHARデータ型はUTF-16としてエンコードされます。

次の例では、表typedemoを変更し、列Name4を追加します。データ型はNCHARです。

Command> ALTER TABLE typedemo ADD COLUMN Name4 NCHAR (10);
Command> DESCRIBE typedemo;

Table USER.TYPEDEMO:
  Columns:
    NAME                            CHAR (20)
    NAME2                           TT_CHAR (20)
    NAME3                           CHAR (10 CHAR)
    NAME4                           NCHAR (10)
1 table found.

VARCHAR2

VARCHAR2データ型は、可変長文字列を指定します。VARCHAR2列を定義する場合は、バイトまたは文字の最大数を定義します。各値は指定したとおりに格納されます。この値が列の最大長を超えることはできません。

最大長を指定する必要があります。最小値は1バイト以上である必要があります。文字の最大長を指定するには、CHAR修飾子を使用します。たとえば、VARCHAR2(10 CHAR)です。

文字のサイズは、データベース文字セットに応じて1バイトから4バイトの範囲になります。BYTE修飾子およびCHAR修飾子は、NLS_LENGTH_SEMANTICSパラメータ設定より優先されます。NLS_LENGTH_SEMANTICSの詳細は、「ALTER SESSION」を参照してください。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「グローバリゼーション・サポート属性の設定」も参照してください。

NULL値は、行内の各NULL値可能フィールドに対して単一ビットとして格納されます。値がNULLであるINLINE VARCHAR2(n)は、(nullビット) + 4バイト+ nバイトの記憶域を使用します。つまり、値がNULLであるNOT INLINE VARCHAR2(n)よりもnバイト多く記憶域を使用します。この記憶域の原則は、すべての可変長データ型(TT_VARCHARTT_NVARCHARVARCHAR2NVARCHAR2VARBINARY)に適用されます。

ノート:

  • VARCHARデータ型は、使用しないでください。VARCHAR2を使用してください。これら2つの型は現在同じ意味で使用されていますが、VARCHARデータ型は、別のセマンティクスを使用する別のデータ型として再定義される可能性があります。

  • VARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_VARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。VARCHAR2では非空白埋め比較セマンティクスが使用されます。TT_VARCHARでは空白埋め比較セマンティクスが使用されます。TT_VARCHAR型は下位互換用にサポートされています。

次の例では、表typedemoを変更し、列name5name6を追加します。name5列は型VARCHAR2により定義されます。name6列はTT_VARCHARにより定義されます。次の例では、列name5での非空白埋め比較セマンティクスの使用と、列name6での空白埋め比較セマンティクスの使用を示しています。

Command> ALTER TABLE typedemo ADD COLUMN name5 VARCHAR2 (20);
Command> ALTER TABLE typedemo ADD COLUMN name6 TT_VARCHAR (20);
Command> DESCRIBE typedemo;
Table USER.TYPEDEMO:
  Columns:
    NAME                            CHAR (20)
    NAME2                           TT_CHAR (20)
    NAME3                           CHAR (10 CHAR)
    NAME4                           NCHAR (10)
    NAME5                           VARCHAR2 (20) INLINE
    NAME6                           TT_VARCHAR (20) INLINE
1 table found.
(primary key columns are indicated with *)
Command> -- Insert SMITH followed by 5 spaces into all columns
Command> INSERT INTO typedemo 
         VALUES ('SMITH     ', 
                 'SMITH     ', 
                 'SMITH     ', 
         'SMITH     ',
         'SMITH     ',
         'SMITH');
1 row inserted.
Command> -- Expect 0; Nonpadded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name5 = 'SMITH';
< 0 >
1 row found.
Command> -- Expect 1; Blank-padded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name6 = 'SMITH';
< 1 >
1 row found.
Command> -- Expect 1; Nonpadded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name5 > 'SMITH';
< 1 >
1 row found.
Command> -- Expect 0; Blank-padded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name6 > 'SMITH';
< 0 >
1 row found.

NVARCHAR2

NVARCHAR2データ型は、2バイトのUnicode文字の可変長文字列です。NVARCHAR2列を定義する場合は、文字の最大数を定義します。各値は指定したとおりに格納されます。この値が列の最大長を超えることはできません。

ノート:

NVARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NVARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。NVARCHAR2では非空白埋め比較セマンティクスが使用されます。TT_NVARCHARでは空白埋め比較セマンティクスが使用されます。TT_NVARCHAR型は下位互換用にサポートされています。

NVARCHAR2データ型は、UTF-16としてエンコードされます。

次の例では、表typedemoを変更し、列Name7を追加します。データ型はNVARCHAR2です。

Command> ALTER TABLE typedemo ADD COLUMN Nnme7 NVARCHAR2 (20);
Command> DESCRIBE typedemo;
Table USER1.TYPEDEMO:
  Columns:
    NAME                            CHAR (20)
    NAME2                           TT_CHAR (20)
    NAME3                           CHAR (10 CHAR)
    NAME4                           NCHAR (10)
    NAME5                           VARCHAR2 (20) INLINE
    NAME6                           TT_VARCHAR (20) INLINE
    NAME7                           NVARCHAR2 (20) INLINE
1 table found.