При попытке создать атрибуты я обнаружил, что максимальная длина кода атрибута составляет 30 символов. Оказывается, однако, что это на самом деле НЕ какое-то реальное ограничение - это совершенно произвольное значение, определяемое
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
Учитывая это, почему вообще существует ограничение? И почему по умолчанию 30, а не, например, 255, который является фактическим пределом столбца базы данных?
PS. Если кто-то может придумать лучшие теги для этого вопроса, пожалуйста, обновите их.
источник
ATTRIBUTE_CODE_MAX_LENGTH
константы не было.Прекрасный пример команд или отдельных разработчиков, не разговаривающих друг с другом. В то время как основная
eav_attribute
таблицаatrtibute_code
- этоvarchar(255)
, это кодовое значение часто используется в других таблицах.Там
catalog_product_link_attribute
естьproduct_link_attribute_code
атрибут (который является кодом атрибута), и этот столбец являетсяvarchar(32)
. Еще в доисторические времена, когда объекты продаж были объектами EAV, у них был столбец attribute_code, который имелvarchar(50)
длину.Я думаю, что есть и другие.
Без фактической спецификации или соглашения о том, что создавалось, разработчик, отвечающий за пользовательский интерфейс для раздела атрибутов, вероятно, просмотрел все
attribute_code
столбцы, выбрал самый короткий и установил длину, чтобы пользователи не могли создать код атрибута. это было бы слишком долго для одной из различных таблиц, над которыми работали другие разработчики.Что касается того, почему разработчик выбрал
varchar
длину, которая не соответствовала255
- есть идея о дизайне базы данных, которая гласит, что вы создаете свои столбцы только в тех случаях, когда они необходимы для экономии дискового пространства, сокращения оперативной памяти, повышения эффективности операций объединения. и т. д. Некоторые разработчики по-прежнему придерживаются этого в сравнении с современной тенденцией «сделать его как можно больше и беспокоиться о последствиях для производительности позже». Ясно, что когда-то были разногласия по поводу максимальной длиныvarchar
forattribute_code
среди основной команды Magento в какой-то момент, и теперь она живет в устаревшем коде.источник
Как говорит xyphoid , предыдущее ограничение было вызвано поддержкой Oracle BD, поскольку в Oracle столбцы могут иметь длину только 30 символов.
Сейчас же,
После модификации ядра окоршенко ( PR № 10225 )
Значение определяется как 60, потому что в плоском режиме код атрибута будет преобразован в имя столбца. MySQL допускает только 64 символа в имени столбца.
источник
Чтобы устранить эту ошибку, пожалуйста, используйте этот код
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; до 60
Код должен быть
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
Это решит вашу проблему.
источник