

# データ型に関する考慮事項
<a name="data-types-considerations"></a>

## サイズ制限
<a name="data-types-considerations-size"></a>

サイズ制限を指定しないデータ型については、単一の行内にあるすべてのデータに対して 32MB という実用的制限が設定されていることに注意してください。詳細については、「[Amazon Athena での SQL クエリに関する考慮事項と制約事項](other-notable-limitations.md)」の [Row or column size limitation](other-notable-limitations.md#sql-limitations-rowsize) を参照してください。

## CHAR と VARCHAR
<a name="data-types-considerations-char"></a>

`CHAR(n)` 値には、常に `n` の文字数があります。たとえば、`CHAR(7)` に「abc」をキャストすると、末尾に 4 つのスペースが追加されます。

`CHAR` 値の比較には、先頭と末尾のスペースが含まれます。

`CHAR` または `VARCHAR` に長さが指定されている場合、文字列は読み取り時に指定された長さで切り捨てられます。基盤となるデータ文字列がそれより長い場合、基盤となるデータ文字列はそのまま変更されません。

`CHAR` または `VARCHAR` で一重引用符をエスケープするには、追加の一重引用符を使用します。

DML クエリ内の文字列に文字列以外のデータ型をキャストするには、`VARCHAR` データ型にキャストします。

`substr` 関数を使用して `CHAR` データ型から指定された長さの従属文字列を返すには、まず `CHAR` 値を `VARCHAR` としてキャストする必要があります。以下の例では、`col1` が `CHAR` データ型を使用します。

```
substr(CAST(col1 AS VARCHAR), 1, 4)
```

## DECIMAL
<a name="data-types-considerations-decimal"></a>

特定の 10 進値を含む行を選択する場合など、`SELECT` クエリのリテラルとして 10 進値を指定するには、以下の例にあるように、クエリ内で `DECIMAL` 型を指定し、一重引用符内のリテラルとして 10 進値をリストすることができます。

```
SELECT * FROM my_table
WHERE decimal_value = DECIMAL '0.12'
```

```
SELECT DECIMAL '44.6' + DECIMAL '77.2'
```