マルチバイト文字のロードエラー
CHAR データ型の列はシングルバイト UTF-8 文字のみを最大 127 バイトまで、または 16 進数の 7F まで受け取ります。これは ASCII 文字セットでもあります。VARCHAR 列はマルチバイト UTF-8 文字を最大 4 バイトまで受け取ります。詳細については、「文字型」を参照してください。
ロードデータの行に列のデータ型として有効でない文字が含まれる場合、COPY はエラーを返し、STL_LOAD_ERRORS システムログテーブルの行にエラー番号 1220 がログ記録されます。ERR_REASON フィールドには無効な文字のバイトシーケンスが 16 進数で含まれます。
ロードデータの無効な文字を修正する代替策は、ロードプロセス中に有効でない文字を置換することです。有効でない UTF-8 文字を置換するには、COPY コマンドに ACCEPTINVCHARS オプション付けて実行します。ACCEPTINVCHARS オプションが設定されている場合は、指定した文字がコードポイントに置き換わります。ACCEPTINVCHARS オプションが設定されていない場合、Amazon Redshift は有効な UTF-8 として文字を受け入れます。詳細については、「ACCEPTINVCHARS」を参照してください。
次に、有効な UTF-8 で記述したコードポイントのリストを示します。ACCEPTINVCHARS オプションが設定されていない場合、COPY オペレーションはエラーを返しません。また、ここでのコードポイントは有効でない文字で記述されています。ACCEPTINVCHARS オプションを使用すると、このコードポイントを指定したい文字に置き換えられます。これらのコードポイントには、0xFDD0
から 0xFDEF
の範囲および 最大で 0x10FFFF
までの値が含まれ、末尾には FFFE
または FFFF
の値が付加されます。
0xFFFE
,0x1FFFE
,0x2FFFE
, …,0xFFFFE
,0x10FFFE
0xFFFF
,0x1FFFF
,0x2FFFF
, …,0xFFFFF
,0x10FFFF
次の例は、COPY により UTF-8 文字の e0 a1 c7a4
を CHAR 列にロードしようとして発生する、エラーの理由を示しています。
Multibyte character not supported for CHAR (Hint: Try using VARCHAR). Invalid char: e0 a1 c7a4
エラーが VARCHAR データ型に関連する場合、エラーの理由にはエラーコードと、有効でない UTF-8 16 進数シーケンスが含まれます。次の例では、COPY で UTF-8 a4
を VARCHAR フィールドにロードしようとした際に発生する、エラーの理由を示しています。
String contains invalid or unsupported UTF-8 codepoints. Bad UTF-8 hex sequence: a4 (error 3)
次のテーブルには、VARCHAR ロードエラーの説明と回避策提案を記載しています。これらのエラーの 1 つが発生した場合、文字を有効な UTF-8 コードシーケンスで置換するか、文字を削除します。
エラーコード | Description |
---|---|
1 | UTF-8 バイトシーケンスが VARCHAR でサポートされる 4 バイトの上限を超えています。 |
2 | UTF-8 バイトシーケンスが不完全です。COPY を実行したが、文字列の終わりの前にあるマルチバイト文字の連続バイトが予想された数ではありませんでした。 |
3 | UTF-8 シングルバイト文字が範囲外です。開始バイトを 254、255、または 128 から 191 までの間の任意の文字 (128 と 191 を含む) にすることはできません。 |
4 | バイトシーケンスの後続バイトの値が範囲外です。連続バイトは 128 から 191 まで (128 と 191 を含む) にする必要があります。 |
5 | UTF-8 文字が代理として予約されています。代理コードポイント (U+D800~U+DFFF) は有効ではありません。 |
8 | バイトシーケンスが最大 UTF-8 コードポイントを超えています。 |
9 | UTF-8 バイトシーケンスに一致するコードポイントがありません。 |