Я знаю, что на вопросы с таким названием уже были даны ответы, но, пожалуйста, продолжайте читать. Я внимательно прочитал все остальные вопросы / ответы об этой ошибке перед публикацией.
Я получаю указанную выше ошибку по следующему запросу:
CREATE TABLE IF NOT EXISTS `pds_core_menu_items` (
`menu_id` varchar(32) NOT NULL,
`parent_menu_id` int(32) unsigned DEFAULT NULL,
`menu_name` varchar(255) DEFAULT NULL,
`menu_link` varchar(255) DEFAULT NULL,
`plugin` varchar(255) DEFAULT NULL,
`menu_type` int(1) DEFAULT NULL,
`extend` varchar(255) DEFAULT NULL,
`new_window` int(1) DEFAULT NULL,
`rank` int(100) DEFAULT NULL,
`hide` int(1) DEFAULT NULL,
`template_id` int(32) unsigned DEFAULT NULL,
`alias` varchar(255) DEFAULT NULL,
`layout` varchar(255) DEFAULT NULL,
PRIMARY KEY (`menu_id`),
KEY `index` (`parent_menu_id`,`menu_link`,`plugin`,`alias`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Кто-нибудь знает, почему и как это исправить? Загвоздка в том, что этот же запрос отлично работает на моем локальном компьютере и работал на моем предыдущем хосте. Кстати, это из зрелого проекта - phpdevshell - так что я предполагаю, что эти ребята знают, что делают, хотя вы никогда не знаете.
Любая подсказка приветствуется.
Я использую phpMyAdmin.
источник
Эта ошибка означает, что длина индекса
index
превышает 1000 байт. MySQL и механизмы хранения могут иметь это ограничение. У меня аналогичная ошибка в MySQL 5.5 - «Указанный ключ слишком длинный; максимальная длина ключа составляет 3072 байта при запуске этого скрипта:UTF8 многобайтовый, длина ключа рассчитывается таким образом - 500 * 3 * 6 = 9000 байт.
Но обратите внимание, следующий запрос работает!
... поскольку я использовал CHARSET = latin1, в этом случае длина ключа составляет 500 * 6 = 3000 байт.
источник
У меня была эта проблема, и я решил ее следующим образом:
Ссылка
источник
запустите этот запрос перед созданием или изменением таблицы.
SET @@global.innodb_large_prefix = 1;
это установит максимальную длину ключа 3072 байта
источник
Этот предел размера индекса кажется больше в 64-битных сборках MySQL.
Я столкнулся с этим ограничением, пытаясь сбросить нашу базу данных разработчиков и загрузить ее на локальную виртуальную машину VMWare. Наконец я понял, что удаленный сервер разработчика был 64-битным, и я создал 32-битный virt. Я только что создал 64-битный virt и смог загрузить базу данных локально.
источник
Я только что обошел эту ошибку, просто изменив значения «длины» в исходной базе данных до суммы около «1000», изменив ее структуру и затем экспортировав ее на сервер. :)
источник
Я столкнулся с той же проблемой, которая использовалась ниже для ее решения.
При создании БД вы можете использовать кодировку utf-8
например.
create database my_db character set utf8 collate utf8mb4;
РЕДАКТИРОВАТЬ: (Учитывая предложения из комментариев) Изменен utf8_bin на utf8mb4
источник
utf8
это НЕutf8
, это проприетарный формат с ошибками, который никогда не должен был реализовываться.utf8mb4
истинноutf8
и рекомендуется по умолчанию для надлежащейutf8
поддержки.utf8mb4
- правильная кодировка для использования в mysql, а не для использованияutf8