Overwrite following class:
app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php
add following code inside
public function prepareFlatTable($storeId)
foreach ($columns as $fieldName => $fieldProp) {
if (!isset($fieldProp['length'])) {
$columnLength = null;
} else {
if ($fieldProp['type'] == 'text' && $fieldProp['length'] == 255) {
$columnLength = 140;
} else {
$columnLength = $fieldProp['length'];
}
}
$columns[$fieldName] = array_merge($columns[$fieldName], ['length' => $columnLength]);
}
After
if (Mage::helper('core')->useDbCompatibleMode()) {
/* Convert old format of flat columns to new MMDB format that uses DDL types and definitions */
foreach ($columns as $key => $column) {
$columns[$key] = Mage::getResourceHelper('core')->convertOldColumnDefinition($column);
}
}
So your code should look like:
// Extract columns we need to have in flat table
$columns = $this->getFlatColumns();
if (Mage::helper('core')->useDbCompatibleMode()) {
/* Convert old format of flat columns to new MMDB format that uses DDL types and definitions */
foreach ($columns as $key => $column) {
$columns[$key] = Mage::getResourceHelper('core')->convertOldColumnDefinition($column);
}
}
foreach ($columns as $fieldName => $fieldProp) {
if (!isset($fieldProp['length'])) {
$columnLength = null;
} else {
if ($fieldProp['type'] == 'text' && $fieldProp['length'] == 255) {
$columnLength = 140;
} else {
$columnLength = $fieldProp['length'];
}
}
$columns[$fieldName] = array_merge($columns[$fieldName], ['length' => $columnLength]);
}
You can reduce column length this way.