Podczas próby tworzenia atrybutów odkryłem, że maksymalna długość kodu atrybutu wynosi 30 znaków. Okazuje się jednak, że tak naprawdę NIE jest to jakieś prawdziwe ograniczenie - jest to wartość całkowicie arbitralna, zdefiniowana przez
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
Biorąc to pod uwagę, dlaczego w ogóle istnieje ograniczenie? I dlaczego domyślna wartość 30 to, na przykład 255, który jest rzeczywistym limitem kolumny bazy danych?
PS. Jeśli ktoś może wymyślić lepsze tagi dla tego pytania, zaktualizuj je.
źródło
ATTRIBUTE_CODE_MAX_LENGTH
stała nie istniała.Idealny przykład zespołów lub indywidualnych programistów, którzy nie rozmawiają ze sobą. Chociaż główna
eav_attribute
tabelaatrtibute_code
ma wartość avarchar(255)
, ta wartość kodu jest często używana w innych tabelach.Jest
catalog_product_link_attribute
tamproduct_link_attribute_code
atrybut (który jest kodem atrybutu), a ta kolumna tovarchar(32)
. W czasach prehistorycznych, gdy obiektami sprzedaży były obiekty EAV, mieli kolumnę z kodem atrybutuvarchar(50)
o długości.Wyobrażam sobie, że są też inni.
Bez faktycznej specyfikacji lub porozumienia co do tego, co jest budowane, programista odpowiedzialny za interfejs użytkownika dla sekcji atrybutów prawdopodobnie przejrzał wszystkie
attribute_code
kolumny, wybrał najkrótszą i wprowadził długość, aby użytkownicy nie mogli utworzyć kodu atrybutu byłoby to zbyt długo na jedną z różnych tabel, nad którymi pracowali inni programiści.Co do tego, dlaczego programista wybrał
varchar
długość, która nie była255
- istnieje szkoła myślenia o projektowaniu baz danych, która mówi, że tworzysz kolumny tylko tak długo, jak trzeba, aby zaoszczędzić miejsce na dysku, zmniejszyć pamięć RAM, być bardziej wydajnym w operacjach łączenia itp. Niektórzy programiści nadal trzymają się tego w przeciwieństwie do współczesnego trendu „zwiększania rozmiaru do maksimum i martwienia się o wpływ na wydajność później”. To jasne, nie było różnicy zdań w sprawie maksymalnej długości od avarchar
doattribute_code
„s między rdzeń zespołu Magento w jednym punkcie, a teraz żyje w starszych kod.źródło
Jak mówi xyphoid , poprzednie ograniczenie było spowodowane, gdy Oracle BD był obsługiwany, ponieważ w Oracle kolumny mogą mieć tylko 30 znaków.
Teraz,
Po modyfikacji rdzenia okorshenko ( PR # 10225 )
Wartość jest zdefiniowana jako 60, ponieważ w trybie płaskim kod atrybutu zostanie przekształcony w nazwę kolumny. MySQL dopuszcza tylko 64 symbole w nazwie kolumny.
źródło
Aby rozwiązać ten błąd, użyj tego kodu
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; do 60
Kod powinien być
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
To rozwiąże twój problem.
źródło