2009-06-19 14 views
2

Wie kann ich ein VARCHAR auf die Tabellenfeldlänge AUTOMATISCH in Derby mit SQL abgeschnitten?Kürzen Sie ein VARCHAR auf bestimmte Länge in Derby AUTOMATISCH

Um genau zu sein:

A truncation error was encountered trying to shrink VARCHAR '123' to length 2. 

Gibt es eine einfache Möglichkeit, diese Ausnahme zu unterdrücken:

CREATE TABLE A (B VARCHAR(2)); 
INSERT INTO A B VALUES ('1234'); 

eine SQLException werfen würde?

Antwort

3

Nein. Sie sollten es abhacken nach dem Überprüfen der Metadaten. Oder wenn Sie die Meta-Daten nicht jedes Mal überprüfen möchten, müssen Sie sowohl Ihren Code als auch Ihre Datenbank synchronisieren. Aber das ist keine große Sache, es ist eine übliche Praxis in Validatoren.

+0

Diese Tabelle wird überall verwendet. Es ist nicht einfach, den Code synchron zu halten. –

+0

In Übereinstimmung mit der Datenbank meine ich. Es ist keine große Sache, es würde nicht ab und zu sein. Stellen Sie sich selbst eine Frage, wie oft Sie die Länge des Feldes in Ihrer Datenbank ändern werden. Diese Art der Validierung geht Hand in Hand mit den Einschränkungen der Datenbanken, ich sehe kein Problem damit. –

+0

Und wenn Sie das wirklich wollen, suchen Sie vor dem Einfügen nach Metadaten, es würde trotzdem zu einem Leistungsmangel führen. –

0

Sie können den Varchar vor dem Einfügen zuschneiden. Verwenden Sie die Trim-Funktion in Ihrem Einfügen Skript/Prozedur.

Ich bin nicht vertraut mit Derby, aber in MSSQL mache ich genau das gleiche, mit Trimmung zu vermeiden Abschneiden Fehler (nur wo ich nicht die vollständigen Daten benötigen), ist es viel vorzuziehen, die Länge von zu erhöhen die varchar

+0

die varchar Erhöhung hier nicht erwünscht ist, glaube ich. Er hat keine Probleme mit Kürzung, Kürzung ist sogar ein bevorzugtes Verhalten für ihn. Zweitens, trimmen nur Arbeiten für Räume. –

0

können Sie SUBSTR verwenden:

CREATE TABLE A (B VARCHAR(2)); 
INSERT INTO A B VALUES (SUBSTR('1234', 1, 2)); 

Falls Sie vorbereitete Anweisungen verwenden:

INSERT INTO A B VALUES (SUBSTR(?, 1, 2));