Strategie bei Datenüberlänge

joschilein

Multitalent
ID: 9301
L
5 Mai 2006
1.393
151
Ein Array enthält alle Variablen, die gleich an im Zusammenhang mit einem vorbereiteten Query an die Datenbank gesendet werden sollen. Die Keys sind dabei die Spaltennamen und die Values die einzutragenden Werte.

Auf SQL-Injections etc ist natürlich geprüft. Nun kann es aber sein, dass ein Wert zu lang ist und die in der DB definierte Länge überschreitet. Hauptgrund könnte sein, dass bestimmte Spalten verschlüsselt gespeichert werden sollen und durch die Verschlüsselung und die verwendeten Schlüssel nicht völlig klar ist, welche Länge die Ausgabe haben soll.

Ich überlege mir nun, was wohl die beste Lösung wäre.
  • Feldlänge schon vorher vergrößern (aktuell varchar(200) wo nur knapp 100-150 Zeichen erwartet werden) oder gleich auf Text setzen
  • Feldlänge dynamisch erweitern, wenn es nötig wird. Vor der Datenzusammenstellung wird eh SHOW COLOUMS ausgeführt. Daraus ließe sich auch ein ALTER TABLE vor den eigentlichen INSERT basteln.
  • Überlange Felder abfangen und alternativ speichern, z.B. als CSV (mit eigenen Mehrzeichen-Feldtrennern) o.ä.

Problem bei 3: Es ist dann zwar nichts verloren, aber um die Daten später einfach und schnell verarbeiten zu können, müssten sie ja eh irgendwann in einem längeren Feld in der selben Tabelle stehen.

Problem bei 2: Die Zugriffsrechte für den MySQL-Benutzer könnten gerade bei ALTER eingeschränkt sein. Das ist zwar aktuell nicht das Problem, gilt es aber im Hinterkopf zu behalten.

Problem bei 1: Ja hmm. Wie sinnvoll ist es mehrere Felder als Text zu definieren und sie dann nur für maximal ein paar hundert Zeichen zu verwenden?

Vermutlich ist 1 am sinnvollsten, 2 geht mir aber auch nicht aus dem Kopf :think:
 
Wenn es keine funktionale Anforderung ist, dass Texte nur eine bestimmte Länge haben dürfen, würde ich technisch nicht auf feste Längen setzen und somit TEXT einsetzen. Der Overhead ist maximal 1 Byte im Gegensatz zu (VAR)CHAR.

Variante 2 ist in meinen Augen irgendwie "pfui bäh!" und Variante 3 äußerst unhandlich...
 
KISS rockt

Hallo Joschilein,

tleilax hat schon recht, KISS!

Wobei: Wieviele Felder dieser Art hast Du? Nur ein paar, oder wirklich viele? Falls Du hunderte solcher Felder hättest könnte Variante 2 eine Überlegung wert sein. In allen anderen Fällen nimm gleich Text, wie auch von tleilax empfohlen.

Freudige Grüße!

Timon