Укажите длину индексных ключей в CakeSchema - PullRequest
0 голосов
/ 07 декабря 2011

Если вы собираетесь определить ключ индекса с помощью механизма InnoDB MySQL, вы можете получить это сообщение об ошибке:

"Specified key was too long; max key length is 767 bytes"

На самом деле это предупреждается в документации MySQL .

Решение довольно простое. Вам просто нужно указать длину ключа в SQL, например ::100100

CONSTRAINT UNIQUE INDEX (`name`(50), `active`)

Но при работе со схемами и приборами CakePHP я не смог найти способ указать это, поэтому мои тесты не пройдены.

Альтернативным решением может быть удаление массива 'indexes' прибора. Но было бы неплохо сделать это через CakeSchema.

Возможно ли это сделать с реальной CakeSchema в CakePHP 2.0?

Спасибо!

1 Ответ

0 голосов
/ 20 ноября 2012

Нет, похоже, что не поддерживается в CakeSchema: (

http://api.cakephp.org/view_source/dbo-source#l-3103

Вам придется полагаться на пользовательский SQL для его поддержки.

Iиспользуйте плагин CakeDC Migrations для управления изменениями схемы (вверх и вниз).

https://github.com/CakeDC/migrations

При этом я использовал обратный вызов after () для запуска пользовательских операторов alter

var $migration = array(
    'up' => array(
        'create_field' => array(
            'utils' => array(
                'indexes' => array(
                    // can not add here, because we can't specify column
                    // length - see after() callback
                    //'key_val' => array('column' => array('key', 'val'), 'unique' => 0),
                    'key_misc1' => array('column' => array('key', 'misc1'), 'unique' => 0),
                )
            )
        )
    ),
    'down' => array(
        'drop_field' => array(
            'utils' => array(
                'indexes' => array(
                    'key_val',
                    'key_misc1',
                )
            )
        )
    ),
);
function after($direction) {
    if ($direction=='up') {
        $sql = 'ALTER TABLE `utils` ADD INDEX `key_val` (`key`, `val`(128));';
        $Util = ClassRegistry::init('Util');
        $Util->query($sql);
    }
    return true;
}

`` `

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...