回答:
これは、Oracleサポートの追加の1.6部分でほぼ確実に変更されました。Oracleでは、列の長さは30文字しかありません。そのため、多くのMagento属性が短くなり、この制限が同時に追加されたと思います。
これに関する多くの議論についてはhttp://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdfを参照してください。
チームまたは個々の開発者が互いに話し合っていない完璧な例。メインeav_attribute
テーブルatrtibute_code
はですがvarchar(255)
、このコード値は他のテーブルでよく使用されます。
でcatalog_product_link_attribute
ありますproduct_link_attribute_code
(属性コードである)属性は、このコラムですvarchar(32)
。先史時代、salesオブジェクトが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
列を見て、最も短い列を選択し、ユーザーが属性コードを作成できないように長さを強制しました。これは、他の開発者が取り組んでいるさまざまなテーブルの1つには長すぎます。
開発者がそうvarchar
ではない長さを選択する理由については、255
データベースの設計について、ディスク領域を節約し、RAMを削減し、結合操作をより効率的にするために必要な列だけを作成するという考え方があります。など。一部の開発者は、「これを可能な限り大きくして、後でパフォーマンスへの影響を心配する」という最近の傾向と対比して、今でもこれを保持しています。Magentoコアチーム間でのvarchar
for attribute_code
の最大長に不一致があったことは明らかであり、現在はレガシーコードで使用されています。
同様剣状突起、と言う以前のオラクルでは、列はわずか30文字の長さにすることができため、Oracle BDがサポートされていた時に制限が発生しました。
後okorshenkoコア修正(PR#10225)
const ATTRIBUTE_CODE_MAX_LENGTH = 60;
次の表は、各タイプの識別子の最大長を示しています。
| Identifier | Maximum Length (characters) | |------------|-----------------------------| | Column | 64 |
フラットモードでは属性コードが列名に変換されるため、値は60として定義されます。MySQLは、カラム名に64シンボルのみを許可します。
このエラーを解決するには、このコードを使用してください
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; 60まで
コードは
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
これで問題が解決します。
ATTRIBUTE_CODE_MAX_LENGTH
定数は存在しませんでした。