資料類型 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料類型

Amazon Redshift 所儲存或擷取的每個值,都具有資料類型,而資料類型具有一組固定的相關屬性。資料類型會在資料表建立時宣告,用來限制欄或引數可包含的一組值。

下表列出您可以在 Amazon Redshift 中使用的資料類型。

資料類型 Aliases 描述
SMALLINT INT2 帶正負號的 2 位元組整數
INTEGER INT、INT4 帶正負號的 4 位元組整數
BIGINT INT8 帶正負號的 8 位元組整數
DECIMAL NUMERIC 可選擇精確度 (有效位數) 的精確數值
REAL FLOAT4 單精度浮點數
DOUBLE PRECISION FLOAT8、FLOAT 雙精度浮點數
CHAR CHARACTER、NCHAR、BPCHAR 固定長度的字元字串
VARCHAR CHARACTER VARYING、NVARCHAR、TEXT 可變長度的字元字串 (使用者定義的限制)
DATE 日曆日期 (年、月、日)
TIME TIME WITHOUT TIME ZONE 一天中的時間
TIMETZ TIME WITH TIME ZONE 一天中的時間,含時區
TIMESTAMP TIMESTAMP WITHOUT TIME ZONE 日期和時間 (未使用時區)
TIMESTAMPTZ TIMESTAMP WITH TIME ZONE 日期和時間 (包含時區)
INTERVAL YEAR TO MONTH 一年到月訂單的持續時間
INTERVAL DAY TO SECOND 從天到第二順序的持續時間
BOOLEAN BOOL 邏輯布林值 (true/false)
HLLSKETCH 與 HyperLogLog 草圖一起使用的類型。
SUPER 超集資料類型,包含 Amazon Redshift 的所有純量類型,包括複雜類型 (例如 ARRAY 和 STRUCTS)。
VARBYTE VARBINARY、BINARY VARYING 可變長度二進位值
GEOMETRY 空間資料
GEOGRAPHY 空間資料
注意

如需 "char" (請注意,char 會用引號括住) 等不支援資料類型的相關資訊,請參閱不支援的 PostgreSQL 資料類型

多位元組字元

VARCHAR 資料類型支援最多 4 個位元組的 UTF-8 多位元組字元,不支援 5 個位元組或更長的字元。若要針對包含多位元組字元的 VARCHAR 資料欄,計算其大小,請將字元數乘以每個字元的位元組數。例如,如果字串包含 4 個中文字,而每個字的長度是 3 個位元組,那麼您將需要使用 VARCHAR(12) 資料欄來儲存這個字串。

VARCHAR 資料類型不支援下列無效的 UTF-8 碼位:

0xD800 – 0xDFFF (位元組序列:ED A0 80 - ED BF BF)

CHAR 資料類型不支援多位元組字元。

類型相容性與轉換

接下來的內容將會說明在 Amazon Redshift 中,類型轉換規則與資料類型相容性的運作方式。

相容性

在資料庫各種操作的作業期間,會進行資料類型的比對,以及字面值與常數和資料類型的比對,包括下列的操作:

  • 對資料表進行的資料處理語言 (DML) 操作

  • UNION、INTERSECT 和 EXCEPT 查詢

  • CASE 表達式

  • 述詞的評估,例如 LIKE 和 IN

  • 針對進行資料比較或擷取的 SQL 函式,進行評估

  • 數學運算子的比較

這些操作的結果,取決於類型轉換規則和資料類型的相容性。兼容性意味著並不總是需要 one-to-one 匹配某個值和特定數據類型。由於某些資料類型是相容的,因此可進行隱含轉換或強制轉換 (如需詳細資訊,請參閱 隱含轉換類型)。當資料類型不相容時,有時您可以使用明確的轉換函式,來將值從一種資料類型轉換為另一種。

一般相容性與轉換規則

請注意下列的相容性與轉換規則:

  • 一般而言,屬於相同類型類別的資料類型 (例如不同的數值資料類型),彼此可以相容和隱含轉換。

    例如,進行隱含轉換時,您可以將小數值插入整數資料欄。小數會經過四捨五入而變成整數。或者,您可以從日期中擷取 2008 等數值,然後將該數值插入整數資料欄。

  • 數值資料類型會強制執行嘗試插入 out-of-range 值時發生的溢位情況。例如,精確度為 5 的小數值,不符合精確度定義為 4 的小數資料欄。小數的整數或完整部分一律不會遭到截斷,但是小數的小數部分可以適當地向上或向下四捨五入。不過,從資料表所選取值的明確轉換結果,不會四捨五入。

  • 不同類型的字元字串可以相容;VARCHAR 資料欄字串包含單位元組資料,CHAR 資料欄字串與其類似,可隱含轉換。包含多位元組資料的 VARCHAR 字串並不相容。此外,如果字串是適當的常值,則可以將字元字串轉換為日期、時間、時間戳記或數值;會忽略開頭或結尾的所有空格。相反地,您也可以將日期、時間、時間戳記或數值,轉換為固定長度或可變長度的字元字串。

    注意

    您想要轉換為數值類型的字元字串,必須包含表示數字的字元。例如,您可以將字串 '1.0''5.9' 轉換為小數值,但無法將字串 'ABC' 轉換為任何數值類型。

  • 如果您將 DECIMAL 值與字元字串進行比較,Amazon Redshift 會嘗試將字元字串轉換為 DECIMAL 值。比較所有其他數值和字元字串時,數值會轉換為字元字串。若要強制執行相反的轉換 (例如,將字元字串轉換為整數,或將 DECIMAL 值轉換為字元字串),請使用明確函數,例如 CAST

  • 若要將 64 位元的 DECIMAL 或 NUMERIC 值轉換為較高的精確度,您必須使用明確轉換函式,例如 CAST 或 CONVERT 函式。

  • 將 DATE 或 TIMESTAMP 轉換為 TIMESTAMPTZ,或將 TIME 轉換為 TIMETZ 時,時區會設定為目前的工作階段時區。工作階段預設的時區為 UTC。如需設定工作階段時區的相關資訊,請參閱 timezone

  • 同樣地,TIMESTAMPTZ 轉換為 DATE、TIME 或 TIMESTAMP 時,也會使用目前工作階段的時區。工作階段預設的時區為 UTC。在轉換之後,會去掉時區的資訊。

  • 用來表示指定時區之時間戳記的字元字串,會使用目前工作階段時區 (預設為 UTC) 轉換為 TIMESTAMPTZ。同樣地,代表指定時區之時間的字元字串,也會使用目前的工作階段時區 (預設為 UTC) 轉換為 TIMETZ。

隱含轉換類型

隱含轉換有兩種:

  • 指派敘述中的隱含轉換,例如設定 INSERT 或 UPDATE 指令中的值。

  • 表達式中的隱含轉換,例如在 WHERE 子句中進行比較。

下表列出了可以在指派敘述或表達式中隱含轉換的資料類型。您也可以使用明確轉換函式來進行這些轉換。

轉換前的類型 轉換後的類型
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT、INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT、INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
INTERVAL DAY TO SECOND
TIMETZ VARCHAR
TIME
GEOMETRY GEOGRAPHY
GEOGRAPHY GEOMETRY
注意

TIMESTAMPTZ、TIMESTAMP、DATE、TIME、TIMETZ 或字元字串之間的隱含轉換,會使用目前工作階段的時區。關於設定目前的時區,詳細資訊請參閱 timezone

GEOMETRY 和 GEOGRAPHY 資料類型無法隱含轉換為彼此以外的任何其他資料類型。如需詳細資訊,請參閱 CAST 函數

VARBYTE 資料類型無法隱含轉換至任何其他資料類型。如需詳細資訊,請參閱 CAST 函數

將動態類型用於 SUPER 資料類型

Amazon Redshift 會使用動態類型來處理無結構描述的 SUPER 資料,無需在查詢中使用資料類型之前先宣告資料類型。動態類型會使用導覽至 SUPER 資料欄的結果,而不必明確地將它們轉換為 Amazon Redshift 類型。如需將動態類型用於 SUPER 資料類型的相關資訊,請參閱動態類型

您可以將 SUPER 值與其他資料類型互相轉換,但有一些例外情況。如需詳細資訊,請參閱 限制