2016-05-31 7 views
0

Ich versuche, einen CSV-Import mit dem Befehl COPY für einige Daten auszuführen, die ein Guillemet (») enthalten. Redshift beklagt, dass der Spaltenwert für die von mir definierte Spalte varchar zu lang ist. Der Fehler in der Registerkarte "Lasten" in der Redshift-GUI zeigt dieses Zeichen als zwei Punkte an: .. - wäre es als eins behandelt worden, hätte es in die Spalte varchar gepasst. Es ist nicht klar, ob ein Konvertierungsfehler auftritt oder ob ein Anzeigeproblem vorliegt.Wie behandelt Redshift Guillemets?

Beim Versuch, auch schlicht INSERT s ich laufe in seltsame Verhalten zu tun:

dev=# create table test (name varchar(3)); 
CREATE TABLE 
dev=# insert into test values ('bla'); 
INSERT 0 1 

3 Zeichen als 4 behandelt?

dev=# insert into test values ('bl»'); 

ERROR: value too long for type character varying(3) 

dev=# insert into test values ('b»'); 

INSERT 0 1 

Warum gibt char_length 2 zurück?

dev=# select char_length(name), name from test; 

char_length | name 
-------------+------ 
      2 | b» 

Ich habe die Kodierung des Clients und Datenbank-Codierungen geprüft und diejenigen, scheinen alle UTF8/UNICODE zu sein.

Antwort

0

Sie müssen die Länge Ihres Varchar-Felds erhöhen. Multibyte-Zeichen verwenden mehr als ein Zeichen und Länge in der Definition von Varchar-Feld sind Byte-basiert. So könnte Ihr spezielles Zeichen mehr als ein Byte benötigen. Wenn es immer noch nicht unten an der doc Seite für Redshift siehe arbeiten,

http://docs.aws.amazon.com/redshift/latest/dg/multi-byte-character-load-errors.html

+0

Ich dachte, dass auch auf den ersten, aber ich würde erwarten, dass ein UTF-8 ähnliche Fehler wie die auf dieser Seite aufgelistet sind, um zu sehen, wie im Gegensatz zu der "zu lang" -Fehlermeldung sah ich. –

+0

Es könnte tatsächlich mehr als ein Zeichen für jedes Multibyte-Zeichen nehmen und Ihre Spaltengröße ist nicht genug dafür. Haben Sie versucht, die Größe Ihrer Spalte zu erhöhen, erhalten Sie immer noch das gleiche Problem? – Paladin

+0

Beachten Sie in meinem obigen Beispiel, dass der dritte INSERT erfolgreich war, als ich nur die 2 Zeichen "b" versuchte, so dass die Spaltengröße erhöht werden konnte. Dieses Verhalten scheint einfach anders zu sein als das, was in der Dokumentation beschrieben wird, und ich versuche zu verstehen, warum das so ist. –