コマンドを介して Redshift にロードされるファイルが S3 にありますCOPY
。コピー コマンド中に変換される がVARCHAR(20)
値に含まれており、20 文字には長すぎるため、インポートが失敗しています。Ä
..
S3 でデータが正しいことを確認しましたが、COPY
インポート中にコマンドが UTF-8 文字を認識しません。誰かがこれに対する解決策を見つけましたか?
コマンドを介して Redshift にロードされるファイルが S3 にありますCOPY
。コピー コマンド中に変換される がVARCHAR(20)
値に含まれており、20 文字には長すぎるため、インポートが失敗しています。Ä
..
S3 でデータが正しいことを確認しましたが、COPY
インポート中にコマンドが UTF-8 文字を認識しません。誰かがこれに対する解決策を見つけましたか?
列のバイト長をvarchar
大きくする必要があります。
マルチバイト文字 (UTF-8) はvarchar
データ型でサポートされていますが、提供される長さはバイト単位であり、文字単位ではありません。
マルチバイト文字読み込みエラーに関する AWS ドキュメントには、次のように記載されています。
VARCHAR
列は、最大 4 バイトまでのマルチバイト UTF-8 文字を受け入れます。
したがって、文字Ä
を許可する場合は、この文字に 1 バイトではなく 2 バイトを許可する必要があります。
VARCHAR または CHARACTER VARYING に関する AWS のドキュメントには、次のように記載されています。
...つまり、
VARCHAR(120)
列は最大 120 個の半角文字、60 個の全角文字、40 個の 3 バイト文字、または 30 個の 4 バイト文字で構成されます。
UTF-8 文字とそのバイト長のリストについては、こちらを参照してください: UTF-8 の完全な文字リスト
Unicode 文字 'LATIN CAPITAL LETTER A WITH DIAERESIS' (U+00C4) の詳細については、こちらを参照してください。
以下のリンクをご確認ください
http://docs.aws.amazon.com/redshift/latest/dg/multi-byte-character-load-errors.html
copy コマンドではACCEPTINVCHARSを使用する必要があります。詳細はこちら
http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#acceptinvchars
Ä
mysqldump データを Redshift クラスターにロードするときに、一部の文字のみが正しくコピーされなかった同様の経験があります。これは、mysqldump のエンコーディングがlatin1
mysql のデフォルトの文字セットであったためです。最初に COPY 用のファイルの文字エンコーディングを確認することをお勧めします。ファイルのエンコーディングが UTF-8 でない場合は、ファイルをエンコードする必要があります。
コピー コマンドで「ACCEPTINVCHARS ESCAPE」を使用すると、小さなデータ変更で問題が解決しました。