Un parfait exemple d'équipes ou de développeurs individuels qui ne se parlent pas. Bien que la eav_attributetable principale atrtibute_codesoit un varchar(255), cette valeur de code est souvent utilisée dans d'autres tables.
Il catalog_product_link_attributey a un product_link_attribute_codeattribut (qui est le code d'attribut), et cette colonne est un varchar(32). À l'époque préhistorique, lorsque les objets de vente étaient des objets EAV, ils avaient une colonne attribute_code qui avait varchar(50)une longueur.
# Mage/Sales/sql/sales_setup/mysql4-upgrade-0.9.45-0.9.46.php
$installer->getConnection()->addColumn($this->getTable('sales_order'), $attribute['attribute_code'], 'varchar(50) NULL');
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_codecolonnes, 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 varcharlongueur qui n'était pas 255- 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'un varcharfor attribute_codeau sein de l'équipe principale de Magento à un moment donné, et maintenant cela continue dans le code hérité.
ATTRIBUTE_CODE_MAX_LENGTHconstante n'existait pas.