ich bin auf der Suche nach einer Möglichkeit, die maximale Länge der Produktnummern zu ändern. In SW6 ist diese via Datentyp VARCHAR(64) in der Datenbank auf 64 Zeichen begrenzt.
Gibt es eine saubere Möglichkeit, dieses Limit zu erhöhen? Ich möchte ungern einfach den Typ der Spalte ändern, da das sicherlich spätestens bei einem größeren Update zu Problemen und/oder Datenverlust führt.
Soweit ich das sehe ist aktuell die einzige Möglichkeit, eine custom Migration anzulegen sowie die Entity Definition zu dekorieren.
Auch wenn sich mir nicht ganz erschließt, was man mit Produktnummern macht, die eine derartige Länge haben (wie sieht das wohl auf Rechnungen, Lieferscheinen etc aus) … denkbare Möglichkeiten wären ein kleines Plugin oder der Einbau in ein eigenes Theme. Dort jeweils nach Install und/oder Update ein „Alter“ auf die Tabelle bzw. die Spalte. Ein Alter auf z.B. VARCHAR(100) ändert nicht den Datentyp. Probleme bei Updates dürften nicht entstehen. Allerdings kann es durchaus sein, dass SW-interne Prozesse längere Strings kappen, also am Ende nicht das rauskommt, was Du willst. „Versuch mach kluch“. Du kannst natürlich auch die Tabelle um eine eigen Spalte erweitern (Plugin) und dort Deine lange Variante hinterlegen. Musst halt alle betreffenden Prozesse, Twigs etc. anpassen.
Der Use-Case ist ausgearbeitet und gut durchdacht. Das ALTER-Statement auf die Tabelle abzufeuern ist ein logischer Schritt, allerdings muss parallel dazu die ProductDefinition dekoriert werden, da das NumberRangeField standardmäßig eine MaxLength von 64 hat. Ich hatte gehofft, dass es eine bessere Lösung gibt.
Auch wenn ich selber keine Antwort habe, stellt sich mir schon die Frage, warum SW für ein VARCHAR-Feld so einen „krummen“ Wert nimmt. Andere VARCHAR-Spalten sind auch mit den „gängigen“ Größen von 50, 70, 255 etc. belegt. Ob es wirklich relevant ist … keine Ahnung … aber, die BINARY-Fields sind mit einer Länge von 16 Bytes festgelegt. Wenn ich das Prefixing bei Varchar mal ignoriere ergibt sich ein Faktor von 4. Zudem ist product_number ein UniqueKey. Möglicherweise passiert, z.B. beim Indexieren, mehr mit der product_number als auf den ersten Blick erkennbar. Wie geschrieben … alles nur Vermutung.