Длинные кириллические url magento

Тема в разделе "Базы данных", создана пользователем donvictorio, 1 фев 2012.

Модераторы: latteo
  1. donvictorio

    donvictorio

    Регистр.:
    28 янв 2010
    Сообщения:
    870
    Симпатии:
    798
    правила url_rewrite в магенто хранятся в колонке`request_path`, тип varchar(255), а это всего около 50 кириллических символов, чего не хватает для полноценной работы. транслитерация в движке работает хреново, вследствие чего seo составляющая url падает на нет.

    подумал о том, чтобы изменить тип колонки на text, но не умею составить запрос с key, который ограничит индекс, а без него mysql говорит ошибкой
    Код:
    BLOB/TEXT column 'request_path' used in key specification without a key length
    сам запрос на создание таблицы core_url_rewrite:

    Код:
    CREATE TABLE `core_url_rewrite` (
      `url_rewrite_id` int(10) unsigned not null auto_increment,
      `store_id` smallint(5) unsigned not null default '0',
      `id_path` varchar(255),
      `request_path` varchar(255) not null,
      `target_path` varchar(255),
      `is_system` smallint(5) unsigned default '1',
      `options` varchar(255),
      `description` varchar(255),
      `category_id` int(10) unsigned,
      `product_id` int(10) unsigned,
      PRIMARY KEY (`url_rewrite_id`),
      UNIQUE KEY (`request_path`,`store_id`),
      UNIQUE KEY (`id_path`,`is_system`,`store_id`),
      KEY `IDX_CORE_URL_REWRITE_TARGET_PATH_STORE_ID` (`target_path`,`store_id`),
      KEY `IDX_CORE_URL_REWRITE_ID_PATH` (`id_path`),
      KEY `IDX_CORE_URL_REWRITE_STORE_ID` (`store_id`),
      KEY `FK_CORE_URL_REWRITE_CTGR_ID_CAT_CTGR_ENTT_ENTT_ID` (`category_id`),
      KEY `FK_CORE_URL_REWRITE_PRODUCT_ID_CATALOG_CATEGORY_ENTITY_ENTITY_ID` (`product_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=82;
    `request_path` - строка, которую надо сделать text, а после запроса идут вставки.

    как грамотно это сделать, ограничив индекс строки в 1000 символов? (этого должно хватить для UNIQUE KEY)
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    Код:
    CREATE TABLE `core_url_rewrite` ( 
    ... 
    `text` TEXT DEFAULT NULL,
    ....
    UNIQUE INDEX UK_t1_text (`request_path` (N))
    ....
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=82;
    
    собсно размер индекса указывается в байтах ( параметр N )
    и у него есть какое-то ограничения в настройках, и на гамнохостингах оно явно небольшое
    хотя для magento наверн используется VPS
     
    donvictorio нравится это.
  3. donvictorio

    donvictorio

    Регистр.:
    28 янв 2010
    Сообщения:
    870
    Симпатии:
    798
    орёт, что Specified key was too long; max key length is 767 bytes, та же фигня, если в varchar(255) заливать больше 767 байт. а где в настройках это дело -без понятия.

    upd: по ходу это не лечится http://bugs.mysql.com/bug.php?id=4541?

    типа приклеить UNIQUE к типу blob/text на произвольную длину нельзя?