Was ist die "datenbankunabhängigste" Methode zum Erstellen eines Textfelds variabler Länge in einer Datenbank?

8

Ich möchte ein Textfeld in der Datenbank ohne spezifische Größe erstellen (es wird Text der Länge in einigen Fällen unbekannt gespeichert) - der bestimmte Text sind serialisierte einfaches Objekt (~ JSON)

Was ist der datenbankunabhängigste Weg? - ein varchar ohne Größe angegeben (glaube nicht, dass alle db dies unterstützen) - ein "Text" -Feld, das scheint üblich zu sein, aber ich glaube nicht, dass es ein Standard ist - ein Blob oder ein anderes Objekt dieser Art? - ein Varchar von sehr großer Größe (das ist ineffizient und verschwendet wahrscheinlich Speicherplatz) - Andere?

Ich benutze JDBC, aber ich möchte etwas verwenden, das in den meisten DB (Oracle, MySQL, PostgreSQL, Derby, HSQL, H2 usw.) unterstützt wird.

Danke.

    
Thibaut Colar 25.05.2010, 18:32
quelle

5 Antworten

3
  

ein Varchar von sehr großer Größe (das ist ineffizient und verschwendet wahrscheinlich Speicherplatz)

Das wird die tragbarste Option sein. Beschränken Sie sich auf 2000 Zeichen und Sie sollten für die meisten Datenbanken in Ordnung sein (Oracle ist der aktuelle 2000-Limiter, aber seien Sie vorsichtig bei alten mysql-Versionen). Ich würde mir auch keine Gedanken über Speicherplatz machen. Die meisten Datenbanken verwenden nur Datenträger für die tatsächlichen Daten im Feld gespeichert.

    
Joel Coehoorn 25.05.2010, 18:46
quelle
3

Müssen Sie wirklich alle sechs dieser Datenbanken unterstützen? (Hinweis: Nein. )

Ich bin zu der Meinung gekommen, dass das Schreiben von universell portierbarem SQL DDL den Aufwand nicht wert ist. YAGNI .

Sie sollten die Datenbanken unterstützen, die Sie derzeit verwenden und bereit sein, sich an eine Datenbank anzupassen, die Sie in Zukunft übernehmen.

Kommentieren Sie: Die einzigen standardmäßigen SQL-Datentypen mit variabler Länge sind VARCHAR und BLOB . VARCHAR ist für Zeichenfolgendaten und seine Deklaration enthält einen Zeichensatz und eine Sortierung. BLOB ist für Binärdaten und unterstützt keine Zeichensatz / Sortierung.

Andere Datentypen wie VARCHAR(max) , CLOB oder TEXT sind Erweiterungen des Herstellers:

Bill Karwin 25.05.2010 18:42
quelle
1

Verwenden Sie ein BLOB. Die JDBC2.0 API unterstützt dies und daher sollte jeder Treiber, der JDBC2.0 (J2SE 5.0 on) unterstützt, dies unterstützen.
Die Vorteile von BLOB sind:
1. Größe kann so groß wie 4G-1 sein (Oracle. Andere Datenbanken nicht so sicher)
2. Kann alle gewünschten Daten speichern (auch Bilder, die in ein Feld in Ihrer JSON-Struktur serialisiert sind) 3. Völlig neutral, um über OS zu transportieren 4. Sie können weiterhin Indizes von Schlüsseln verwenden, die auf das BLOB verweisen, so dass Suchen auf IDs usw. nicht durch Aufrufen der Struktur ausgeführt werden müssen.

    
dsj 25.05.2010 19:04
quelle
0

Verwenden Sie ein Framework wie Hibernate, so dass Sie nicht das Problem haben werden, eine universelle Lösung zu finden. Ich glaube nicht, dass Sie in allen erwähnten Datenbanken einen universellen Typ verwenden können. Die Datenbanken unterscheiden sich sehr, denke ich.

    
Georg Henkel 25.05.2010 18:45
quelle
0

Text ist vielleicht am besten , aber zu in Kürze von SQL Server entfernt werden und es gibt keine DBMS-unabhängige Option für alle , die Sie aufgelistet haben.

Wenn man sagt, dass Portabilität bei SQL überbewertet wird. Es ist wahrscheinlicher, dass Sie Ihren Client-Code ändern, bevor Sie DBMS ändern. Wählen Sie einen und gehen Sie damit ....

    
gbn 25.05.2010 18:53
quelle

Tags und Links