Un ejemplo perfecto de equipos o desarrolladores individuales que no hablan entre sí. Si bien la eav_attributetabla principal atrtibute_codees a varchar(255), este valor de código a menudo se usa en otras tablas.
En catalog_product_link_attributehay un product_link_attribute_codeatributo (que es el código de atributo), y esta columna es un varchar(32). En tiempos prehistóricos, cuando los objetos de ventas eran objetos EAV, tenían una columna de atributo_código que tenía varchar(50)como longitud.
# 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');
Me imagino que hay otros también.
Sin una especificación o acuerdo real sobre lo que se estaba construyendo, el desarrollador a cargo de la interfaz de usuario para la sección de atributos probablemente miró todas las attribute_codecolumnas, eligió la más corta e impuso una longitud para asegurarse de que los usuarios no pudieran crear un código de atributo eso sería demasiado largo para una de las diversas tablas en las que otros desarrolladores estaban trabajando.
En cuanto a por qué un desarrollador elegiría una varcharlongitud que no fuera así 255: hay una escuela de pensamiento sobre el diseño de la base de datos que dice que solo hace sus columnas siempre que sea necesario para ahorrar espacio en disco, reducir RAM, ser más eficientes en las operaciones de unión , etc. Algunos desarrolladores aún se aferran a esto frente a la tendencia moderna de "hacerlo lo más grande posible y preocuparse por las implicaciones de rendimiento más adelante". Está claro que hubo un desacuerdo sobre la longitud máxima de un varcharfor attribute_codeentre el equipo central de Magento en un punto, y ahora sigue vivo en el código heredado.
ATTRIBUTE_CODE_MAX_LENGTHconstante no existía.