

# 数据类型的注意事项
<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` 个字符数。例如，若将 'abc' 强制转换为 `CHAR(7)`，则会添加 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>

要在 `SELECT` 查询中将十进制值指定为文字（例如选择具有特定十进制值的行时），您可以指定 `DECIMAL` 类型，并在查询中将该十进制值列为单引号中的文字，如下例所示：

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

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