我需要将Order Item属性保存为最多400个字符的字符串。虽然它可以使用text属性实现,但我宁愿使用varchar(400)。但是,_addFlatAttribute()
中的Mage_Sales_Model_Resource_Setup
方法将varchar的长度硬编码为255.事后可以通过DDL的安装脚本更改它,但我想知道是否可能存在下游依赖项在VARCHAR上是255个字符。
有什么想法吗?
答案 0 :(得分:2)
我相信你会好起来的鉴于实例中订单实体数据的规模不断扩大,建议这样做。我很好奇Magento的版本,因为CE1.6 +是第一个拥有Mage_Sales_Model_Resource_Setup
[link]类的版本。在CE1.6之前,课程为Mage_Sales_Model_Mysql4_Setup
[link]。这是一个重要的区别,因为这些类中的列定义方法不同于1.6 +
Mage_Sales_Model_Mysql4_Setup::_getAttributeColumnDefinition
[link]:
protected function _getAttributeColumnDefinition($code, $data)
{
$columnDefinition = '';
$type = isset($data['type']) ? $data['type'] : 'varchar';
$req = isset($data['required']) ? $data['required'] : false;
switch ($type) {
case 'int':
$columnDefinition = 'int(10) unsigned';
break;
case 'decimal':
$columnDefinition = 'decimal(12,4)';
break;
case 'text':
$columnDefinition = 'text';
break;
case 'date':
$columnDefinition = 'datetime';
break;
default:
$columnDefinition = 'varchar(255)';
break;
}
if ($req) {
$columnDefinition.= ' NOT NULL';
}
return $columnDefinition;
}
Mage_Sales_Model_Resource_Setup::_getAttributeColumnDefinition
[link]:
protected function _getAttributeColumnDefinition($code, $data)
{
// Convert attribute type to column info
$data['type'] = isset($data['type']) ? $data['type'] : 'varchar';
$type = null;
$length = null;
switch ($data['type']) {
case 'timestamp':
$type = Varien_Db_Ddl_Table::TYPE_TIMESTAMP;
break;
case 'datetime':
$type = Varien_Db_Ddl_Table::TYPE_DATETIME;
break;
case 'decimal':
$type = Varien_Db_Ddl_Table::TYPE_DECIMAL;
$length = '12,4';
break;
case 'int':
$type = Varien_Db_Ddl_Table::TYPE_INTEGER;
break;
case 'text':
$type = Varien_Db_Ddl_Table::TYPE_TEXT;
$length = 65536;
break;
case 'char':
case 'varchar':
$type = Varien_Db_Ddl_Table::TYPE_TEXT;
$length = 255;
break;
}
if ($type !== null) {
$data['type'] = $type;
$data['length'] = $length;
}
$data['nullable'] = isset($data['required']) ? !$data['required'] : true;
$data['comment'] = isset($data['comment']) ? $data['comment'] : ucwords(str_replace('_', ' ', $code));
return $data;
}
答案 1 :(得分:1)
我无法想象,如果你要减小varchar的大小,可能会有所不同。
另见: Is there a good reason I see VARCHAR(255) used so often (as opposed to another length)?
答案 2 :(得分:1)
使用TEXT类型代替VARCHAR。在这种情况下,Mage_Sales_Model_Resource_Setup
假设长度为64KB。