Answers:
在添加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)
。回溯到史前时期,当销售对象是EAV对象时,它们有一个attribute_code列,varchar(50)
其长度为。
# 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并提高联接操作效率的前提下创建列等等。一些开发人员仍然坚持这种与现代趋势相对的趋势,即“使其尽可能大,并在以后担心性能影响”。很明显,Magento核心团队在一个时间上对varchar
for 的最大长度存在分歧attribute_code
,现在它仍然存在于遗留代码中。
就像xyphoid所说,以前的限制是在支持Oracle BD时引起的,因为在Oracle中,列的长度只能为30个字符。
之后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
常量不存在。