Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Magento将VARCHAR属性硬编码为255长度,有没有理由不更改?_Magento_Attributes_Varchar - Fatal编程技术网

Magento将VARCHAR属性硬编码为255长度,有没有理由不更改?

Magento将VARCHAR属性硬编码为255长度,有没有理由不更改?,magento,attributes,varchar,Magento,Attributes,Varchar,我需要将订单项属性保存为最多400个字符的字符串。虽然可以使用文本属性实现,但我更愿意使用varchar(400)。但是,Mage\u Sales\u Model\u Resource\u设置中的\u addFlatAttribute()方法将varchar的长度硬编码为255。它可以在使用DDL的安装脚本之后进行更改,但是我想知道是否有可能对VARCHAR的下游依赖是255 char 有什么想法吗?我无法想象,不过,如果您减小varchar的大小,情况可能会有所不同 另见: 我无法想象,但是,

我需要将订单项属性保存为最多400个字符的字符串。虽然可以使用文本属性实现,但我更愿意使用varchar(400)。但是,
Mage\u Sales\u Model\u Resource\u设置中的
\u addFlatAttribute()
方法将varchar的长度硬编码为255。它可以在使用DDL的安装脚本之后进行更改,但是我想知道是否有可能对VARCHAR的下游依赖是255 char


有什么想法吗?

我无法想象,不过,如果您减小varchar的大小,情况可能会有所不同

另见:

我无法想象,但是,如果减小varchar的大小,情况可能会有所不同

另见:

我相信,考虑到实例中订单实体数据的规模不断扩大,您最好这样做。我很好奇Magento的哪个版本,因为CE1.6+是第一个拥有这个类的版本。在CE1.6之前,该课程为。这是一个重要的区别,因为这些类中的列定义方法不同,以适应1.6中的DB不可知方法+

:

以及:


我相信,考虑到一个实例中订单实体数据的规模不断扩大,您将很好地建议这样做。我很好奇Magento的哪个版本,因为CE1.6+是第一个拥有这个类的版本。在CE1.6之前,该课程为。这是一个重要的区别,因为这些类中的列定义方法不同,以适应1.6中的DB不可知方法+

:

以及:


使用类型TEXT而不是VARCHAR
Mage\u Sales\u Model\u Resource\u Setup
在这种情况下假定长度为64KB。

使用文本而不是VARCHAR
Mage\u Sales\u Model\u Resource\u Setup
在本例中假定长度为64KB。

谢谢Nathan,我同意MySQL端应该没问题,我更关心的是Magento端……前端的一些PHP页面的验证将某些输入限制为255个字符,但是,当您添加自己的属性时,您正在更改的内容不应该影响这些属性。不过,请确保您的PHP页面中也有适当的验证。谢谢Nathan,我同意MySQL端应该没问题,我更关心的是Magento端……前端的一些PHP页面的验证将某些输入限制为255个字符,但是,当您添加自己的属性时,您正在更改的内容不应该影响这些属性。不过,请确保您的PHP页面中也有相应的验证。感谢Ben,这是在1.12(EE)-模块依赖性问题的单独开发中:)我确实认为最好将字段限制为400个字符,而不是由于行限制(我想这就是您所指的)而允许65k的文本。啊,我被“varchar长度的硬编码”挂断了-正如你在上面看到的,它应该是文本。遗憾的是,在这种上下文中不能指定字段的长度(没有类重写),但是在添加后更新该列的解决方案应该是可行的。但是,请注意,如果采用这种方法,您将对表进行两次更改,这在任意大的表上可能是一个问题—通常是销售实体表的情况。双重更改的优点在于将表锁定一段时间。感谢Ben,这在1.12(EE)中-模块依赖性问题的单独开发:)我确实认为将字段限制为400字符是一个好主意,而不是因为行限制(我想这就是您所指的)而允许65k的文本。啊,我被“硬编码varchar的长度”挂断了-正如您在上面看到的,它应该是文本。遗憾的是,在这种上下文中不能指定字段的长度(没有类重写),但是在添加后更新该列的解决方案应该是可行的。但是,请注意,如果采用这种方法,您将更改表两次,这在任意大的表上可能是一个问题—通常是销售实体表的情况。双重更改的优点是—意味着将表锁定一段时间。
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;
}
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;
}