Ao tentar criar atributos, descobri que o comprimento máximo de um código de atributo é de 30 caracteres. Acontece, porém, que isso NÃO é realmente algum tipo de restrição real - é um valor completamente arbitrário, definido por
Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
Então, considerando isso, por que existe alguma restrição? E por que o padrão 30, e não o exemplo 255, é o limite real da coluna do banco de dados?
PS. Se alguém puder pensar em tags melhores para esta pergunta, atualize-as.
fonte
ATTRIBUTE_CODE_MAX_LENGTH
constante não existia.Um exemplo perfeito de equipes ou desenvolvedores individuais que não conversam entre si. Enquanto a
eav_attribute
tabela principalatrtibute_code
é avarchar(255)
, esse valor de código é frequentemente usado em outras tabelas.Em
catalog_product_link_attribute
que há umproduct_link_attribute_code
atributo (que é o código de atributo), e esta é uma colunavarchar(32)
. Nos tempos pré-históricos, quando os objetos de vendas eram objetos EAV, eles tinham uma coluna attribute_code que tinhavarchar(50)
um comprimento.Eu imagino que há outros também.
Sem uma especificação ou acordo real sobre o que estava sendo construído, o desenvolvedor responsável pela interface do usuário da seção de atributos provavelmente examinou todas as
attribute_code
colunas, escolheu a mais curta e aplicou um comprimento para garantir que os usuários não pudessem criar um código de atributo isso seria muito longo para uma das várias tabelas em que outros desenvolvedores estavam trabalhando.Quanto ao motivo pelo qual um desenvolvedor escolheria um
varchar
tamanho que não era255
- existe uma escola de pensamento sobre o design do banco de dados que diz que você só cria suas colunas o tempo necessário para economizar espaço em disco, reduzir a RAM, ser mais eficiente nas operações de junção , etc. Alguns desenvolvedores ainda mantêm isso em relação à tendência moderna de "torná-lo o maior possível e se preocupar com implicações no desempenho posteriormente". É claro que houve discordância quanto ao tamanho máximo de umvarchar
forattribute_code
's entre a equipe principal do Magento em um ponto, e agora ele permanece no código legado.fonte
Como o xyphoid diz, a limitação anterior foi causada quando o Oracle BD foi suportado, porque no Oracle as colunas podem ter apenas 30 caracteres.
Agora,
Após modificação do núcleo okorshenko ( PR # 10225 )
O valor é definido como 60 porque no código de atributo do modo simples será transformado em nome da coluna. O MySQL permite apenas 64 símbolos no nome da coluna.
fonte
Para resolver esse erro, use este código
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; a 60
O código deve ser
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
Isso resolverá seu problema.
fonte