En essayant de créer des attributs, j'ai découvert que la longueur maximale d'un code d'attribut est de 30 caractères. Il s'avère cependant que ce n'est PAS réellement une sorte de véritable restriction - c'est une valeur complètement arbitraire, définie par
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
Donc, étant donné cela, pourquoi y a-t-il une restriction? Et pourquoi la valeur par défaut est 30, plutôt que par exemple 255, qui est la limite réelle de la colonne de base de données?
PS. Si quelqu'un peut penser à de meilleures balises pour cette question, veuillez les mettre à jour.
la source
ATTRIBUTE_CODE_MAX_LENGTH
constante n'existait pas.Un parfait exemple d'équipes ou de développeurs individuels qui ne se parlent pas. Bien que la
eav_attribute
table principaleatrtibute_code
soit unvarchar(255)
, cette valeur de code est souvent utilisée dans d'autres tables.Il
catalog_product_link_attribute
y a unproduct_link_attribute_code
attribut (qui est le code d'attribut), et cette colonne est unvarchar(32)
. À l'époque préhistorique, lorsque les objets de vente étaient des objets EAV, ils avaient une colonne attribute_code qui avaitvarchar(50)
une longueur.J'imagine qu'il y en a aussi d'autres.
Sans spécification ou accord réel sur ce qui était en cours de construction, le développeur en charge de l'interface utilisateur pour la section d'attribut a probablement regardé toutes les
attribute_code
colonnes, choisi la plus courte et appliqué une longueur pour s'assurer que les utilisateurs ne pouvaient pas créer un code d'attribut ce serait trop long pour l'une des différentes tables sur lesquelles d'autres développeurs travaillaient.Quant à savoir pourquoi un développeur choisirait une
varchar
longueur qui n'était pas255
- il y a une école de pensée sur la conception de base de données qui dit que vous ne faites vos colonnes que tant qu'elles doivent être pour économiser de l'espace disque, réduire la RAM, être plus efficace dans les opérations de jointure , etc. Certains développeurs tiennent toujours à cela par rapport à la tendance moderne de "le rendre aussi grand que possible et de se soucier des implications de performances plus tard". Il est clair qu'il y avait un désaccord sur la longueur maximale d'unvarchar
forattribute_code
au sein de l'équipe principale de Magento à un moment donné, et maintenant cela continue dans le code hérité.la source
Comme le dit xyphoid , la limitation précédente a été provoquée lorsque Oracle BD était pris en charge car dans Oracle, les colonnes ne peuvent contenir que 30 caractères.
Maintenant,
Après la modification du noyau okorshenko ( PR # 10225 )
La valeur est définie comme 60 car dans le code d'attribut en mode plat sera transformé en nom de colonne. MySQL n'autorise que 64 symboles dans le nom de colonne.
la source
Pour résoudre cette erreur, veuillez utiliser ce code
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; à 60
Le code doit être
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
Cela résoudra votre problème.
la source