Вчера пытался с помощью mysql-upgrade добавить колонку VARCHAR (20) в существующую таблицу и получил exception при отработке апгрейда. Чтобы было представление о чем я говорю, в файле было примерно следующее:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();
// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/file'), 'file_name', array(
'comment' => 'Name of file',
'nullable' => true,
'column_type' => Varien_Db_Ddl_Table::TYPE_VARCHAR,
'length' => 100
));
Это при том, что при добавлении таблицы колонка с такими же параметрами создается:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();
/**
* Create table 'navoq_backup/backup_list'
*/
$table = $adapter->newTable($installer->getTable('navoq_backup/file'))
->addColumn('file_name', Varien_Db_Ddl_Table::TYPE_VARCHAR,
100, array('nullable' => true), 'Name of file')
->setComment('Navoq Backup File List');
$adapter->createTable($table);
Мистика, не так ли? Но выход есть. Вернемся к первоначальному коду. Если добавить колонку таким образом:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();
// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/backup_list'), 'file_name', array(
'comment' => 'Name of file',
'nullable' => true,
'column_type' => Varien_Db_Ddl_Table::TYPE_TEXT
));
У нас выполнится апгрейд и в таблице `navoq_backup_file` появится поле `file_name` типа TEXT. Но стоит нам добавить в предыдущий код параметр
length:
/** @var $installer Navoq_Backup_Model_Resource_Setup */
$installer = $this;
/** @var $adapter Varien_Db_Adapter_Pdo_Mysql */
$adapter = $installer->getConnection();
// Add 'file_name' column
$adapter->addColumn($installer->getTable('navoq_backup/backup_list'), 'file_name', array(
'comment' => 'Name of file',
'nullable' => true,
'column_type' => Varien_Db_Ddl_Table::TYPE_TEXT,
'length' => 100
));
И у нас создается то же поле `file_name` но типа VARCHAR и длинной в 100 символов. Enjoy ;)
Читать далее