Beim Versuch, Attribute zu erstellen, habe ich festgestellt, dass die maximale Länge eines Attributcodes 30 Zeichen beträgt. Es stellt sich jedoch heraus, dass dies KEINE echte Einschränkung ist - es ist ein völlig willkürlicher Wert, definiert durch
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
Warum gibt es angesichts dessen überhaupt eine Einschränkung? Und warum ist die Standardeinstellung 30 anstelle von beispielsweise 255 die tatsächliche Grenze der Datenbankspalte?
PS. Wenn sich jemand bessere Tags für diese Frage vorstellen kann, aktualisieren Sie diese bitte.
quelle
ATTRIBUTE_CODE_MAX_LENGTH
Konstante existierte nicht.Ein perfektes Beispiel für Teams oder einzelne Entwickler, die nicht miteinander sprechen. Während die
eav_attribute
Haupttabelle aatrtibute_code
istvarchar(255)
, wird dieser Codewert häufig in anderen Tabellen verwendet.In
catalog_product_link_attribute
gibt es einproduct_link_attribute_code
Attribut (das ist der Attributcode), und diese Spalte ist einvarchar(32)
. In prähistorischen Zeiten, als die Verkaufsobjekte EAV-Objekte waren, hatten sie eine Attributcode-Spalte mitvarchar(50)
einer Länge.Ich stelle mir vor, es gibt auch andere.
Ohne eine tatsächliche Spezifikation oder Vereinbarung darüber, was erstellt wurde, hat der für die Benutzeroberfläche des Attributabschnitts verantwortliche Entwickler wahrscheinlich alle
attribute_code
Spalten überprüft, die kürzeste ausgewählt und eine Länge erzwungen, um sicherzustellen, dass Benutzer keinen Attributcode erstellen konnten Das wäre zu lang für eine der verschiedenen Tabellen, an denen andere Entwickler arbeiteten.Warum ein Entwickler eine
varchar
Länge wählen würde, die nicht so ist255
- es gibt eine Denkschule zum Datenbankdesign, die besagt, dass Sie Ihre Spalten nur so lange erstellen, wie es erforderlich ist, um Speicherplatz zu sparen, RAM zu reduzieren und bei Verknüpfungsvorgängen effizienter zu sein usw. Einige Entwickler halten immer noch an diesem modernen Trend fest: "Machen Sie es so groß wie möglich und sorgen Sie sich später um die Auswirkungen auf die Leistung." Es ist klar, dass es Meinungsverschiedenheiten über die maximale Länge einesvarchar
for gabattribute_code
im Magento-Kernteam gab, und jetzt lebt es im Legacy-Code weiter.quelle
Wie xyphoid sagt, wurde die vorherige Einschränkung verursacht, als Oracle BD unterstützt wurde, da in Oracle Spalten nur 30 Zeichen lang sein können.
Jetzt,
Nach Okorshenko-Kernmodifikation ( PR # 10225 )
Der Wert ist als 60 definiert, da im Flat-Modus der Attributcode in den Spaltennamen umgewandelt wird. MySQL erlaubt nur 64 Symbole im Spaltennamen.
quelle
Verwenden Sie diesen Code, um diesen Fehler zu beheben
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; bis 60
Der Code sollte sein
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
Dies wird Ihr Problem lösen.
quelle