속성 코드의 길이가 최대 인 이유는 무엇입니까?


9

속성을 만들려고 할 때 속성 코드의 최대 길이가 30 자임을 발견했습니다. 그러나 이것은 실제로 일종의 실제 제한이 아니라는 것으로 밝혀졌습니다.

Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.

그렇다면 왜 제한이 있습니까? 그리고 왜 데이터베이스 열의 실제 한계 인 255가 아닌 255가 아닌 기본 30 입니까?

추신. 누구든지이 질문에 대해 더 나은 태그를 생각할 수 있다면 업데이트하십시오.

답변:


8

이것은 Oracle 지원 추가의 1.6 부분에서 거의 확실하게 변경되었습니다. Oracle의 경우 열의 길이는 30 자만 가능하므로 많은 Magento 속성이 단축 되었으며이 제한이 동시에 추가되었다고 생각합니다.

이에 대한 자세한 내용은 http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf 를 참조 하십시오 .


1
이. 방금 오래된 1.5 베타 코드베이스를 찔 렀고 ATTRIBUTE_CODE_MAX_LENGTH상수는 존재하지 않았습니다.
Alan Storm

6

서로 이야기하지 않는 팀 또는 개별 개발자의 완벽한 예입니다. 메인 eav_attribute테이블은 atrtibute_code입니다 만 varchar(255),이 코드 값은 종종 다른 테이블에서 사용됩니다.

에서는 catalog_product_link_attribute거기이다 product_link_attribute_code(속성 코드) 특성,이 열은이다 varchar(32). 판매 개체가 EAV 개체였던 선사 시대로 돌아가서 varchar(50)길이 가 같은 attribute_code 열이있었습니다 .

# 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');

다른 사람들도 있다고 상상합니다.

구축중인 것에 대한 실제 사양이나 동의없이 속성 섹션의 UI를 담당하는 개발자는 attribute_code 열을 가장 짧은 열을 선택한 다음 사용자가 속성 코드를 만들 수 없도록 길이를 강화했을 수 있습니다. 다른 개발자들이 작업했던 다양한 테이블 중 하나에 비해 너무 길 것입니다.

개발자 varchar가 그렇지 않은 길이를 선택하는 이유는 255데이터베이스 디자인에 대한 생각이 있는데, 디스크 공간을 절약하고 RAM을 줄이며 조인 작업에서 더 효율적이어야하는 한 열만 만들어야한다는 데이터베이스가 있습니다. 등 일부 개발자는 "대부분 가능한 한 크게 만들고 나중에 성능에 미치는 영향에 대해 걱정합니다"라는 최신 트렌드를 유지합니다. 그것은의 최대 길이에 의견 차이가 있었다 분명 varchar위한 attribute_code하나 개의 지점에서 's를 젠토 코어 팀 중에서는, 지금은 기존의 코드에 살고있다.


이것이 완벽한 예라고 생각하면 @xyphoid는 덜 까다 롭고 정확한 대답을 가지고 있다고 생각합니다.
Alan Storm

0

마찬가지로 xyphoid이 는 말한다 이전을 오라클, 열은 30 자를 수 있기 때문에 오라클 BD가 지원 될 때 제한이 발생했다.

지금,

okorshenko 코어 수정 후 ( PR # 10225 )

const ATTRIBUTE_CODE_MAX_LENGTH = 60;

다음 표는 각 유형의 식별자에 대한 최대 길이를 설명합니다.

| Identifier | Maximum Length (characters) |
|------------|-----------------------------|
| Column     | 64                          |

플랫 모드 속성 코드는 열 이름으로 변환되므로 값은 60으로 정의됩니다 . MySQL은 name 열에 64 개의 기호 만 허용합니다.


-5

이 오류를 해결하려면이 코드를 사용하십시오

CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; 60

코드는

CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;

문제가 해결됩니다.


4
핵심 수정?! 분명히 당신은 농담입니다.
philwinkle

1
왜 212가 아닌 60 세입니까?
Marius

1
왜 5000000이 아닙니까?
Buttle Butkus

그렇게하면 제품을 편집 할 때 속성 옵션을 저장할 수 없습니다.
loeffel

@Marius : EAV 속성 코드는 플랫 테이블의 열 이름으로 변환되며 MySQL은 64 개 이상의 기호가있는 열 이름을 지원하지 않습니다
Nolwennig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.