尝试创建属性时,我发现属性代码的最大长度为30个字符.事实证明,这实际上并不是某种真正的限制 - 它是一个完全任意的值,由
定义Mage_Eav_Model_Entity_Attribute::ATTRIBUTE_CODE_MAX_LENGTH.
因此,为什么会有限制? 为什么默认为30,而不是实例255,这是数据库列的实际限制?
PS.如果有人能想到这个问题的更好的标签,请更新它们。
- 2019-12-51 #
- 2019-12-52 #
团队或个人开发者不互相交谈的完美例子.而主要的
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,在连接操作中更有效等等,你就只能创建列。一些开发人员仍然坚持这一点与现代 "让它尽可能大,后来担心性能影响"的趋势.很明显,对于varchar
的最大长度存在分歧 对于attribute_code
曾经是Magento核心团队中的一员,现在它仍然存在于遗留代码中. - 2019-12-53 #
像xyphoid一样说, previous 支持Oracle BD时会导致限制,因为在Oracle中,列只能是30个字符。
现在,在okorshenko核心修改后(PR#10225)
According app/code/Magento/Eav/Model/Entity/Attribute.php#L29
const ATTRIBUTE_CODE_MAX_LENGTH = 60;
And according MySQL Reference Manual
The following table describes the maximum length for each type of identifier.
| Identifier | Maximum Length (characters) | |------------|-----------------------------| | Column | 64 |
The value is defined as 60 因为在平面模式下属性代码将被转换为列名. MySQL在列名中只允许64个符号.
- 2019-12-54 #
要解决此错误,请使用此代码
CONST ATTRIBUTE_CODE_MAX_LENGTH = 30; 至60
代码应为
CONST ATTRIBUTE_CODE_MAX_LENGTH = 60;
这将解决您的问题。
这几乎肯定在添加Oracle支持的1.6部分中有所改变 - 在Oracle中,列只能是30个字符,所以很多 Magento属性缩短了,我想这个限制是同时添加的.
请参阅http://m-chanaan.hr/wp-content/uploads/2013/04/RDBMS_Guide2.pdf以进行大量讨论.