10

コマンドを介して Redshift にロードされるファイルが S3 にありますCOPY。コピー コマンド中に変換される がVARCHAR(20)値に含まれており、20 文字には長すぎるため、インポートが失敗しています。Ä..

S3 でデータが正しいことを確認しましたが、COPYインポート中にコマンドが UTF-8 文字を認識しません。誰かがこれに対する解決策を見つけましたか?

4

5 に答える 5

15

tl;dr

列のバイト長を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) の詳細については、こちらを参照してください。

于 2015-06-09T06:09:59.910 に答える
1

以下のリンクをご確認ください

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

于 2014-12-24T06:30:27.390 に答える
0

Ämysqldump データを Redshift クラスターにロードするときに、一部の文字のみが正しくコピーされなかった同様の経験があります。これは、mysqldump のエンコーディングがlatin1mysql のデフォルトの文字セットであったためです。最初に COPY 用のファイルの文字エンコーディングを確認することをお勧めします。ファイルのエンコーディングが UTF-8 でない場合は、ファイルをエンコードする必要があります。

于 2014-12-29T23:31:45.267 に答える
0

コピー コマンドで「ACCEPTINVCHARS ESCAPE」を使用すると、小さなデータ変更で問題が解決しました。

于 2016-05-23T04:44:28.363 に答える